我正在尝试在我的主游戏精灵上运行“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;
请帮忙。任何替代方式来调用角色走动画都将非常感激!
答案 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)
精灵朝向正确的方向, 所以我可以告诉动作的第一帧 正在被召唤,但事实并非如此 动画,直到我停止触摸我的 操纵杆。 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];
}
请记住,这是松散的伪代码。并非一切都在语法上是正确的,但逻辑上,你的想法是你有一个状态变量来跟踪角色的当前状态,这样你就可以让你的动画只播放一次。如果这有帮助,如果您对我的答案有任何疑问,请告诉我。