2013-02-24 74 views
1

我有一些使用Cocos2-x的经验,但现在我正在尝试使用Python中的原始cocos2d开发原型,并且发现它非常不同。事情是,我有一个精灵一层如何停止在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,所以我不能想出这个自己。提前

感谢。

回答

2

我从来没有使用cocos2d的蟒(只的cocos2d-iphone),所以我无法回答你的问题,一般情况下是否有更好的方法来做到这一点。但是有两种方法可以做你正在做的事情取决于你的具体情况。

如果你只是想在精灵删除on_key_release()所有行动,所有你需要做的就是精灵的对象,这将删除所有操作呼叫stop()。所以如果你唯一的动作是移动动画,这应该是足够的。

高清on_key_release(个体经营,符号,修饰符): 如果符号== 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 
+0

谢谢。我确认'.stop()'停止所有动作,但是只停止一个动作,应该使用'.remove_action(action)':'self.sprite.remove_action(self.sprite_move_action)'。 – Tae 2013-02-25 15:32:47

+0

很酷,我会更新我的答案以反映这一点,所以对可能发生的任何事情都有帮助。我很高兴这有帮助,因为我没有使用python的cocos2d的经验 – entropy 2013-02-25 15:40:42