Ich versuche, einfaches Spiel in Python und PyQt4 zu schreiben. Es ist ein einfaches Plattformspiel und ich möchte den "Sprung" -Taster während des "move" -Tasters betätigen.Wie wird ein kurzer Tastendruck in der gleichen Zeit ausgeführt, wenn ein langer Tastendruck ausgeführt wird?
Es ist wie ich right arrow
Schlüssel bin halten und in der gleichen Zeit Ich drücke z
(oder einfach eine beliebige Taste, kann Verschiebung, ctrl, cmd, alt sein), und ich möchte nach rechts bewegen, um fortzufahren und in der Gleichzeitiges Ausführen von Jump.
Wenn ich keyPressEvent
benutze funktioniert es gut mit langen "move" Tastendruck, aber jeder "Sprung" -Taster bricht die Bewegung und ich muss Pfeil drücken, um fortzufahren.
Um besser zu verstehen, was ich will auf diese Weise können erreichen aussehen: (> ist Pfeil nach rechts für Bewegung, z für Sprung)
key: >>>>>>>>>>>>> . z . . o player: oooooooo
Wie Sie Ich halte >
sehen und Spieler bewegt sich. In der gleichen Zeit, wenn ich z
drücken Spieler springt und stoppt, auch wenn >
Taste gedrückt ist.
Ist es möglich, dies in Pyqt zu tun? Vielleicht brauche ich dafür eine externe Bibliothek? Jede Hilfe wird geschätzt!
Gelöst!
Dank der Antwort von @Brendan Abel ich alles getan habe ich gebraucht habe :) Code dieser recht ähnlich sieht (ich habe für Klarheit vereinfacht):
class Test(QtGui.QMainWindow):
pressed_keys = {
QtCore.Qt.Key_Left: False,
QtCore.Qt.Key_Right: False,
QtCore.Qt.Key_Z: False,
}
def __init__(self):
self.timer = QtCore.QTimer(self)
self.timer.timeout.connect(self.key_action)
self.timer.start(100)
# definitions hidden for simplicity
self.key_actions = {
QtCore.Qt.Key_Left: self.player_move_backward,
QtCore.Qt.Key_Right: self.player_move_forward,
QtCore.Qt.Key_Z: self.player_jump,
}
def keyPressEvent(self, e):
key = e.key()
self.pressed_keys[key] = True
def keyReleaseEvent(self, e):
key = e.key()
self.pressed_keys[key] = False
def key_action(self):
for key, is_pressed in self.pressed_keys.items():
if is_pressed:
action = self.key_actions[key]
action()
self.update()
Mein Spiel verhält sich jetzt so:
ohne Ihre Tastendruck-Funktion zumindest, Sie werden nicht viel Hilfe bekommen –
vielleicht einen Blick auf http://pyqt.sourceforge.net/Docs/PyQt4/qkeysequence.html, z. QKeySequence (Qt.Right + Qt.Up), um Ihr Problem zu behandeln. – lucasg