如何在cocos2d中停止一个动作?
我之前有一些使用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编程上还是个菜鸟,所以自己搞不定。
提前谢谢你们。
1 个回答
2
我之前没有用过cocos2d的Python版本(只用过cocos2d-iphone),所以不能告诉你有没有更好的方法来解决这个问题。不过,根据你的具体情况,有两种方法可以实现你想要的效果。
如果你只是想在on_key_release()
里停止精灵上的所有动作,你只需要对精灵对象调用stop()
,这样就会停止所有动作。如果你唯一的动作是移动动画,这样做就足够了。
例如,你可以这样写:
def on_key_release(self, symbol, modifiers):
if symbol == 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