【问题标题】:COCOS2D - Animation Stops During MoveCOCOS2D - 动画在移动期间停止
【发布时间】:2010-05-30 01:17:28
【问题描述】:

我正在尝试在我的主要游戏精灵上运行“步行”风格的动画。动画效果很好,我的精灵也很好地连接到了我的操纵杆上。

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

我知道将动画放在如此弱的 if 语句中可能很糟糕,但请告诉我如何让我的精灵在被操纵杆移动时正确动画。

精灵朝向正确的方向,所以我可以知道动作的第一帧正在被调用,但是,直到我停止触摸操纵杆,它才会动画。

这是我如何称呼这个动作:

//向左走

if (joypadCap.position.x >40 */ )
{

  [tjSprite runAction:walkLeft];  

};

//向右走

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

  [tjSprite runAction:walkRight];

};

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

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

请帮忙。任何调用角色行走动画的替代方法将不胜感激!

【问题讨论】:

    标签: iphone animation cocos2d-iphone


    【解决方案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];
    };
    

    【讨论】:

      【解决方案2】:

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

      根据您提供的代码,这实际上是有道理的。您的 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];
      }
      

      请记住,这是松散的伪代码。并非所有的语法都是正确的,但从逻辑上讲,这个想法是你有一个状态变量来跟踪角色的当前状态,这允许你让你的动画只播放一次。让我知道这是否有帮助,如果您对我的回答有任何疑问。

      【讨论】:

      • Rob,非常感谢您的回复。我很感激。我尝试了你的建议,我得到了很好的结果!然而,这个精灵在移动时不会动画,而是面向预期的方向。如果我注释掉我在 sprite 上 stopAllActions 的最后一个“else”语句,它会在移动后进行动画处理。我使用的代码附在下一个答案中。这在我的 mainGameLoop 方法中。非常感谢,如果可以,请提供帮助 :c) 我有一个很棒的故事要讲。
      猜你喜欢
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 2013-10-22
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多