1

ここで 2 番目の質問です。最初の質問は回答であり、本当に役に立ちました。もう一度試してみます。

コードと説明は次のとおりです。

import cocos
from cocos.actions import *
import pyglet
from pyglet.window import key
from pyglet.window.key import KeyStateHandler
from cocos.director import director


keys = KeyStateHandler()

class ScaleTestLayer(cocos.layer.Layer):
    is_event_handler = True 
    def __init__(self):
        super( ScaleTestLayer, self ).__init__()
        self.sprite = cocos.sprite.Sprite('grossini.png')
        self.sprite.position = 320,240
        self.drag = False
        self.add(self.sprite)
        self.rect = self.sprite.get_rect()

    def on_mouse_release(self, x, y, buttons, modifiers):
        if self.rect.contains(x, y) == True:
            if self.drag == False:
                scale = ScaleBy(5, duration=1)
                if buttons == pyglet.window.mouse.LEFT:
                    self.sprite.do(scale)
                if buttons == pyglet.window.mouse.MIDDLE:
                    rotate = RotateBy(180, 1)
                    self.sprite.do(rotate)
                if buttons == pyglet.window.mouse.RIGHT:
                    scale = (Reverse(scale))
                    self.sprite.do(scale)  
            else:
                self.drag = False    

    def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers):
        if self.rect.contains(x, y):
            self.drag = True
            self.sprite.position = director.get_virtual_coordinates (x, y)
        self.rect.center = self.sprite.position

    def on_key_press(self, symbol, modifiers):
        if keys[key.SPACE]:
            jump = JumpBy((5,0), duration=0.5)
            self.sprite.do(jump)
        if keys[key.RIGHT]:
            move = MoveBy((10,0), 0.5)
            self.sprite.do(move)



if __name__ == "__main__":
    cocos.director.director.init()
    test_layer = ScaleTestLayer ()
    main_scene = cocos.scene.Scene (test_layer)
    cocos.director.director.run (main_scene)

ここに私の問題があります。SPACE または RIGHT を押しても、アクションは実行されません。これらのボタンを押しても、値を出力し、keys[key.SPACE] は False を返します。私は何が欠けていますか?多分いくつかの push_handlers? 使い方がわかりません。

事前に感謝します。

4

1 に答える 1

0

はい、更新されるように、で push_handlers を使用する必要がありますKeyStateHandler。私自身は cocos2d を使用したことがなく、pyglet しか使用していないため、これは最善または適切な方法ではないかもしれませんが、うまくいくはずです。

if __name__ == '__main__':
    cocos.director.director.init()
    cocos.director.director.window.push_handlers(keys)
    # Create layer, run, etc.

KeyStateHandlerpyglet ドキュメントの a の使用に関するページを次に示します。pyglet ではウィンドウを自分で作成してそこにアタッチしますが、cocos2d ではウィンドウは director によって処理されます。

また、cocos2d のドキュメントでこのページを見つけました。これは、cocos2d でキーの押下を処理する適切な方法である場合とそうでない場合があります。

于 2013-02-22T18:48:20.410 に答える