You should use Timer and Keys.onReleased
Here is an example that you can adapt to your needs:
property var robot1Event: {"rotation":false,
"move":false};
property var robot2Event: {"rotation":false,
"move":false};
Keys.onPressed: {
if (event.key === Qt.Key_Left) { robot1Event["rotation"] = true; }
if (event.key === Qt.Key_Up) { robot1Event["move"] = true; }
if (event.key === Qt.Key_A) { robot2Event["rotation"] = true; }
if (event.key === Qt.Key_W) { robot2Event["move"] = true; }
}
Keys.onReleased: {
if (event.key === Qt.Key_Left) { robot1Event["rotation"] = false; }
if (event.key === Qt.Key_Up) { robot1Event["move"] = false; }
if (event.key === Qt.Key_A) { robot2Event["rotation"] = false; }
if (event.key === Qt.Key_W) { robot2Event["move"] = false; }
}
Timer {
interval: 50;
running: true;
repeat: true;
onTriggered: {
var rotation = function (robot) { robot.rotation = (robot.rotation - 5) % 360; }
var move = function (robot) {
robot.x = robot.x + robot.speedForward * Math.sin(Math.PI * robot.rotation / 180);
robot.y = robot.y - robot.speedForward * Math.cos(Math.PI * robot.rotation / 180);
}
var robot = repeater.itemAt(0);
if (robot1Event["rotation"]) { rotation(robot); }
if (robot1Event["move"]) { move(robot); }
robot = repeater.itemAt(1);
if (robot2Event["rotation"]) { rotation(robot); }
if (robot2Event["move"]) { move(robot); }
}
}
source
share