COCOS2D - 动画在移动过程中停止

时间:2010-05-30 01:17:29

标签: iphone animation cocos2d-iphone

我正在尝试在我的主游戏精灵上运行“Walk”风格的动画。动画工作得很好,我的精灵连接到我的操纵杆都很精致和花花公子。

但是,我认为在哪里设置我的步行动画的调用是错误的。因为每次精灵移动时,动画都会停止。

我知道将动画置于如此弱的if语句可能不好,但是请告诉我如何在操纵杆移动时让我的精灵正常动画。

精灵朝向正确的方向,所以我可以告诉动作的第一帧被调用,但是,在我停止触摸操纵杆之前它没有动画。

以下是我如何称呼该行动:

  

// WALK LEFT

     

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

  [tjSprite runAction:walkLeft];  
     

};

     

// WALK RIGHT

     

if(joypadCap.position.x> = 71 / *&& joypadCap.position.y< 100&&> joypadCap.position.y> 40 * /)     {

  [tjSprite runAction:walkRight];
     

};

这是:操纵杆控制角色的方式:

  

CGPoint newLocation = ccp(tjSprite.position.x - distance / 8 * cosf(touchAngle),
    tjSprite.position.y - distance / 8 * sinf(touchAngle));
    tjSprite.position = newLocation;

请帮忙。任何替代方式来调用角色走动画都将非常感激!

2 个答案:

答案 0 :(得分: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];
};

答案 1 :(得分:0)

  

精灵朝向正确的方向,   所以我可以告诉动作的第一帧   正在被召唤,但事实并非如此   动画,直到我停止触摸我的   操纵杆。

根据您提供的代码,这实际上是有道理的。你的if语句所说的是任何时候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];
}

请记住,这是松散的伪代码。并非一切都在语法上是正确的,但逻辑上,你的想法是你有一个状态变量来跟踪角色的当前状态,这样你就可以让你的动画只播放一次。如果这有帮助,如果您对我的答案有任何疑问,请告诉我。