2013-02-24 78 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