COCOS2D - анимация останавливается во время движения - PullRequest
0 голосов
/ 30 мая 2010

Я пытаюсь запустить анимацию в стиле "Прогулка" на моем основном игровом спрайте. Анимация работает отлично, и мой спрайт подключен к моему джойстику все отлично и денди.

Однако, я думаю, что там, где я настраиваю вызов для моих анимаций ходьбы, неправильно. Потому что каждый раз, когда спрайт движется, анимация останавливается.

Я знаю, что анимация настолько слабая, если утверждение, вероятно, плохое, но, пожалуйста, скажите мне, как я мог заставить мой спрайт правильно анимировать, пока он перемещается джойстиком.

Спрайт направлен в правильном направлении, поэтому я могу сказать, что вызывается первый кадр действия, однако он не анимируется, пока я не перестану касаться своего джойстика.

Вот как я называю действие:

// 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 - расстояние / 8 * cosf (touchAngle),
tjSprite.position.y - расстояние / 8 * sinf (touchAngle));
tjSprite.position = newLocation;

Пожалуйста помоги. Будем весьма благодарны за любые альтернативные способы вызова анимации ходьбы персонажей!

Ответы [ 2 ]

1 голос
/ 03 июня 2010
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 голосов
/ 02 июня 2010

Спрайт направлен в правильном направлении, так что я могу сказать первый кадр действия называется, однако, это не оживить, пока я не перестану касаться моего джойстик.

На основании предоставленного вами кода это действительно имеет смысл. Ваш оператор 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];
}

Имейте в виду, что это свободный псевдокод. Не все синтаксически правильно, но логически идея в том, что у вас есть переменная состояния для отслеживания текущего состояния персонажей, которая позволяет вам воспроизводить анимацию только один раз. Дайте мне знать, если это поможет, и если у вас есть какие-либо вопросы о моем ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...