Pergunta

Depois de alguns ajustes de algum código que eu tenho de alguém para causar um caracteres imagens para mover-se em relação à sua direção e até para baixo de entrada direito deixou Eu coloquei isso junto: (espero que o código não é muito confuso)

Character mover o código + IMG

O Sprite folha só funciona longitudinalmente, então, basicamente cada seção Sprite é uma ação diferente. Agora haveria uma maneira que eu poderia fazer um código que funciona com o atual para o ciclo para baixo a partir de um conjunto de 'ação', a fim de fazer uma animação?

Por exemplo: 'Run Esquerda' é Sprite 3. Então depois que designar essa coluna seria possível fazer um loop para baixo como sempre muitos quadros da animação prazo (digamos 4), a fim de fazer uma animação?

Exemplo de imagem: text alt http://animania1.ca/ShowFriends/dev/ Exemplo.jpg

Foi útil?

Solução

Deve ser fácil.

Se você gravar o número do quadro em uma variável, você pode modulo isso com o número de quadros que você tem que obter um número de animação quadro a ser exibido.

frame_count = 0
animation_frames = 4
while quit == False:
    # ...
    # snip
    # ...
    area = pygame.Rect(
        image_number * 100,
        (frame_count % animation_frames) * 150,
        100,
        150
    )
    display.blit(sprite, sprite_pos, area)
    pygame.display.flip()
    frame_count += 1

Se as ações diferentes têm números diferentes de quadros, você vai ter que animation_frames atualização quando você atualizar image_number.

Além disso, isso pressupõe que ele está ok para reproduzir a animação a partir de qualquer quadro. Se este não for o caso, você vai precisar para gravar o que a contagem de quadros foi quando a ação começou, e tirar isso de contagem de quadros antes do modulo:

    area = pygame.Rect(
        image_number * 100,
        ((frame_count - action_start_frame) % animation_frames) * 150,
        100,
        150
    )

Uma nota sobre o seu tratamento de eventos. Se você mantiver, digamos, para a esquerda e toque direito, mas continue segurando para baixo à esquerda, o sprite pára de se mover porque o último evento que você processado foi um evento keyup, apesar do fato de que eu ainda estou segurando esquerda.

Se isto não é o que você quer é, você pode obter em torno dele, quer manter um registro do up / down estados das teclas que você está interessado, ou usando o pygame.key.get_pressed interface.

Em outra nota, você parece estar apontando para uma taxa de quadros fixos, e ao mesmo tempo determinar o quão longe para mover seu sprite com base no tempo levado no último quadro. Na minha opinião, isso provavelmente não é o ideal.

jogos de ação 2D geralmente precisam trabalhar de uma maneira previsível. Se algum processo pesado CPU inicia em segundo plano no seu computador e faz com que seu jogo para não ser capaz de despejar 60 quadros por segundo, é provavelmente preferível que desacelerar, em vez de ter seus objetos começar a pular enormes distâncias entre quadros. Imagine se isso aconteceu em um jogo de ação 2D como Metal Slug, onde você está tendo a saltar em torno de evitar balas?

Isso também faz quaisquer cálculos de física muito mais simples. Você vai ter que fazer um julgamento com base no que tipo de jogo que é.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top