Question

Après quelques ajustements de quelque code que je suis arrivé de quelqu'un pour faire un caractères images pour se déplacer en ce qui concerne sa direction et jusqu'à l'entrée droite vers le bas à gauche, je l'ai mis cela ensemble: (espérons que le code n'est pas trop salissant)

text alt href="http://animania1.ca/ShowFriends/dev/example.jpg" rel="nofollow noreferrer"> http://animania1.ca/ShowFriends/dev/ example.jpg

Était-ce utile?

La solution

Il devrait être facile.

Si vous enregistrez le numéro de l'image dans une variable, vous pouvez modulo cela avec le nombre d'images que vous devez obtenir un numéro d'image d'animation pour afficher.

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

Si différentes actions ont un nombre différent de cadres, vous devez mettre à jour animation_frames lorsque vous mettez à jour image_number.

, cela suppose également qu'il est autorisé à jouer l'animation à partir de tout cadre . Si ce n'est pas le cas, vous aurez besoin d'enregistrer ce que le nombre d'images était lorsque l'action a commencé, et de prendre cette distance de nombre d'images avant le modulo:

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

Une note sur votre gestion des événements. Si vous maintenez, disons, à gauche, et appuyez à droite, mais gardez en maintenant à gauche, l'image-objet cesse de se déplacer parce que le dernier événement vous avez traité était un événement keyup, en dépit du fait que je suis toujours parti exploitation.

Si ce n'est pas ce que vous voulez, vous pouvez contourner en soit tenir un registre des états haut / bas des touches qui vous intéressent, ou en utilisant le pygame.key.get_pressed interface.

Sur une autre note, vous semblez viser un taux de cadre fixe, et en même temps à déterminer dans quelle mesure de déplacer l'image-objet en fonction du temps pris dans la dernière image. À mon avis, c'est probablement pas idéal.

jeux d'action 2D doivent généralement travailler de façon prévisible. Si un processus lourd CPU démarre en arrière-plan sur votre ordinateur et provoque votre jeu à ne plus être en mesure de multiplier les 60 images par seconde, il est probablement préférable à ralentir, plutôt ont alors vos objets commencent à sauter d'énormes distances entre les images. Imaginez si cela se produisait dans un jeu d'action 2D comme Metal Slug où vous avoir à sauter autour d'éviter les balles?

Cela rend également les calculs de physique beaucoup plus simple. Vous devrez faire un jugement fondé sur ce type de jeu, il est.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top