Configurar corretamente o setFrameSequence!

Um Sprite tem vários setFrameSequence, um para andar para a direita, outro para andar para a esquerda, etc…

O problema é que não posso setar o setFrameSequence dentro do loop de input do usuário:

Ex:

[code]
if( (keyState & RIGHT_PRESSED) != 0)
sprite.setFrameSequence(sequenciaAndarParaADireita);
nextFrame();

if( (keyState & LEFT_PRESSED) != 0)
sprite.setFrameSequence(sequenciaAndarParaAEsquerda);
nextFrame();

Mas o problema é que só sei quando é para mover para a direita ou esquerda dentro do loop de input, mas o setFrameSequence não pode estar dentro do loop, porque ele será “resetado” e somente a primeira figura da transição é mostrada!

E agora?

E agora usa uma flag! :slight_smile:
flag=0 direita
flag=1 esquerda

[code]if( (keyState & RIGHT_PRESSED) != 0)
if(flag!=0){
sprite.setFrameSequence(sequenciaAndarParaADireita);
flag=0
}
nextFrame();

if( (keyState & LEFT_PRESSED) != 0)
if(flag!=1){
sprite.setFrameSequence(sequenciaAndarParaAEsquerda);
flag=1;
}
nextFrame(); [/code]

switch (direction) {
         case 'u': {
            this.move(0, -(MOVE_SIZE));
            break;
         }
         case 'd': {
            this.move(0, MOVE_SIZE);    
            break;
         }
         case 'r': {
            this.setFrameSequence(this.sequenceWalkRight);
            this.move(MOVE_SIZE, 0);
            break;
         }
         case 'l': {
            this.setFrame(1);
            this.setFrameSequence(this.sequenceWalkLeft);
            this.move(-(MOVE_SIZE), 0);
            break;
         }
         
      }
      this.nextFrame();

Existe uma sequência para movimentar para a direita e outra sequência para movimentar para a esquerda.
Mas o inconveniente é que a movimentação só acontece quando as teclas direcionais cima e baixo são pressionadas!

Você tentou algo como eu coloquei acima ?? Algo tipo:

case 'r': { if(flag!='r'){ this.setFrameSequence(this.sequenceWalkRight); flag='r'; } this.move(MOVE_SIZE, 0); break; } case 'l': { if(flag!='l'){ this.setFrameSequence(this.sequenceWalkLeft); flag='l'; } this.move(-(MOVE_SIZE), 0); break; }
Sem tem o fonte pra rodar e testar fica difícil, mas veja bem se os passos estão certos, olha que no case ‘l’ tu seta s frame no 1 e no mesmo laço ele já pega o próximo.

Não sei como esse flag me ajudaria. O problema mesmo é no nextFrame()

Se o problema ea ele ficar resetando usar uma flag funciona. Mas agora se o problema é dentro do case então tem que ver o que acontece, te que ver se ele não está mudando a sequencia pra de frames para a que tu está setando ou se ele não está nem movimentando o sprite pela tela. Tenta colocar um print dando um getFrame, pra ver se é realmente o que deveria aparecer, tente isso colocando antes e depois do nextframe.