2010-05-30 85 views
0

我試圖在主遊戲精靈上運行「漫遊」式動畫。動畫效果很好,我的精靈和我的操縱桿連在一起都很好看。COCOS2D - 動畫在移動過程中停止

但是,我認爲在哪裏設置了我的步行動畫的電話是錯誤的。因爲每當精靈正在移動時,動畫就停止。

我知道把動畫放在這麼弱的if語句可能很糟糕,但是請告訴我如何讓我的精靈在被控制桿移動時正常動畫。

精靈朝向正確的方向,所以我可以告訴動作的第一幀被調用,但是,它不動畫,直到我停止觸摸我的操縱桿。

這裏是我如何調用該操作:

// WALK LEFT

如果(joypadCap.position.x < = 69/* & & joypadCap.position.y < & & joypadCap。 position.y>> 40 * /)
{

[tjSprite runAction:walkLeft]; 

};

// WALK RIGHT

如果(joypadCap.position.x> = 71/* & & joypadCap.position.y &> joypadCap.position.y> 40 * /) {

[tjSprite runAction:walkRight]; 

};

THIS:是操縱桿的如何控制字符:

CGPoint newLocation = CCP(tjSprite.position.x - 距離/ 8 * cosf(touchAngle),
tjSprite.position.y - 距離/ 8 * sinf(touchAngle));
tjSprite.position = newLocation;

請幫忙。任何其他方式來調用角色走動畫將不勝感激!

回答

1
int current_state; 



if (current_state != 1 && joypadCap.position.x <= 69) 
{ 
    current_state = 1; 
    [tjSprite runAction:walkLeft]; 
}  
else if (current_state != 1 && joypadCap.position.x >= 71) 
{ 
    current_state = 1; 
    [tjSprite runAction:walkRight]; 
} 
else 
{ 
    current_state = 0; 
    //[tjSprite stopAllActions]; 
}; 
0

的精靈朝向正確的方向, 所以我可以告訴動作的第一幀 被調用,然而,它並不 動畫顯示,直到我停止撫摸我的 操縱桿。

根據您提供的代碼,這實際上是有道理的。如果您的聲明說的是,任何時候JoypadCap的位置大於71或小於69播放動畫。這意味着,每次joypadCap的位置落在這些範圍內時,您的動畫都會嘗試從頭開始播放。我認爲joypadCap是衡量遊戲杆被按下的程度的一個指標。

看起來你可以使用一些額外的狀態邏輯來確定你的角色應該做什麼。這裏是一些僞代碼...

state current_state; 

if (current_state != walking and joypadCap.position.x <= 69) 
{ 
    current_state = walking; 
    [tjSprite runAction:walkLeft]; 
}  
else if (current_state != walking and joypadCap.position.x >= 71) 
{ 
    current_state = walking; 
    [tjSprite runAction:walkRight]; 
} 
else 
{ 
    current_state = idle; 
    [tjSprite stopAllActions]; 
} 

請記住,這是鬆散的僞代碼。並非所有的語法都是正確的,但從邏輯上講,這個想法是,你有一個狀態變量來跟蹤角色當前狀態,這可以讓你的動畫只播放一次。讓我知道這是否有幫助,如果您對我的答案有任何疑問。

+0

Rob,我非常感謝你的回覆。我很感激。 我試過了你的建議,我收到了很好的結果!但是,這個精靈在移動時不會動畫,但會面向預期的方向。 如果我註釋掉最後一個「else」聲明,那我在精靈上停止所有動作,它會在它移動之後動畫。我使用的代碼附在下一個答案中。這在我的mainGameLoop方法中。 非常感謝,如果可以的話,請提供幫助:c)我有一個很好的故事。 – maiko 2010-06-02 23:45:40