我有一些使用Cocos2-x的经验,但现在我正在尝试使用Python中的原始cocos2d开发原型,我发现它非常不同。问题是我在图层上有一个精灵
class TestLayer(cocos.layer.Layer):
is_event_handler = True
def __init__(self):
super(TestLayer, self).__init__()
self.sprite = cocos.sprite.Sprite('grossini.png')
self.sprite.position = 320, 340
self.add(sprite)
我可以动一下:
def on_key_press(self, symbol, modifiers):
if symbol ==key.RIGHT:
move = MoveBy((1, 0), 0.1)
repeat = Repeat(move)
self.sprite.do(repeat)
但我不知道如何在on_key_release
方法上停止它。 (在Cocos2d-x中我可以做this->sprite->stopAction(action)
。
此外,我想知道是否有更好的方法(cocos2d Python方式)通过用户输入移动和停止精灵。
我已经阅读了文档和一些游戏示例,但我在Python上进行了n00b编程,所以我不能为自己弄清楚这一点。
提前致谢。
答案 0 :(得分:2)
我从来没有使用cocos2d用于python(只有cocos2d-iphone)所以我无法回答你的问题,如果有更好的方法可以做到这一点。但是,根据您的具体情况,有两种方法可以根据您的要求进行操作。
如果您只想在on_key_release()
中删除精灵上的所有操作,您只需要在精灵对象上调用stop()
即可删除所有操作。因此,如果您的唯一动作是移动动画,那就足够了。
def on_key_release(self,symbol,modifiers): 如果符号== key.RIGHT: self.sprite.stop()
但是,如果您只想停止对精灵的特定操作,并且希望保持其他操作正在运行。然后你需要在某处保存动作,然后在动作上调用stop()
而不是精灵。一个例子可能是这样的:
def __init__(self):
super(TestLayer, self).__init__()
self.sprite = cocos.sprite.Sprite('grossini.png')
self.sprite.position = 320, 340
self.add(sprite)
self.sprite_move_action = None
def on_key_press(self, symbol, modifiers):
if symbol ==key.RIGHT:
move = MoveBy((1, 0), 0.1)
repeat = Repeat(move)
self.sprite_move_action = repeat
self.sprite.do(repeat)
def on_key_release(self, symbol, modifiers):
if symbol == key.RIGHT and self.sprite_move_action is not None:
self.sprite.remove_action(self.sprite_move_action)
self.sprite_move_action = None