0

キーを押しながらスプライトを動かそうとしています。on_key_press() と on_key_release() でそれを行うことができますが、これらを使用すると、左を押しながら右に移動したり、その逆を行ったりするという問題が発生します。キーポーリングを使用したいのですが、pyglet のドキュメントからこれを見つけました。

from pyglet.window import key

window = pyglet.window.Window()
keys = key.KeyStateHandler()
window.push_handlers(keys)

# Check if the spacebar is currently pressed:
if keys[key.SPACE]:
    pass    

これはcocos2dでは実装できないようです。簡単な例を以下に示します。「Key Press!」と表示されます。大丈夫ですが、「スペース!」を印刷できれば。スペースキーを繰り返し押すと、問題が解決します。

from cocos.director import director
from cocos.layer import *
from cocos.scene import Scene
from pyglet.window import key
from pyglet.window.key import KeyStateHandler

class MyLayer(Layer):
    is_event_handler = True

    def __init__(self):
        super(MyLayer, self).__init__()
        self.keys = KeyStateHandler()
        director.window.push_handlers(self.keys)

    def on_key_press(self, symbol, modifiers):
        print('Key press!')
        if self.keys[key.SPACE]:
            print('Space!')

def main():
    director.init(resizable=False, width=1024, height=786)
    title_scene = Scene(MyLayer())
    director.run(title_scene)

if __name__ == '__main__':
    main()

完全を期すために、ここに私の on_key_press()、on_key_release() コードを示します。問題は、右を押して左を押し、左を離すと、on_key_release() が x 速度をゼロに設定するため、スプライトが停止することです。しかし、私はまだ右を押しているので、左を押して放した後、その方向に移動し続けたい.

def on_key_press(self, symbol, modifiers):
    if symbol == key.LEFT:
        self.player1.velocity = (-self.player1.speed, self.player1.velocity[1])
    if symbol == key.RIGHT:
        self.player1.velocity = (self.player1.speed, self.player1.velocity[1])

def on_key_release(self, symbol, modifiers):
    if symbol == key.LEFT:
        self.player1.velocity = (0, self.player1.velocity[1])
    if symbol == key.RIGHT:
        self.player1.velocity = (0, self.player1.velocity[1])
4

1 に答える 1