Pygame:为什么我的播放器动画不会播放?

时间:2013-12-04 18:07:32

标签: python pygame sprite

您好我正在进行一场生存射击游戏,目前我对一些事情感到沮丧。一个是我的播放器动画无效。我在这里有播放器类的代码:

import pygame
from zombie import *

# Player
class Player(pygame.sprite.Sprite):

    def __init__(self, x, y, gravity):

        # Player dimensions and position

        # Player image and animation
        self.images = []
        self.images.append(pygame.image.load('images/Sprites/player.png'))
        self.images.append(pygame.image.load('images/Sprites/player2.png'))
        #~ self.images.append(pygame.image.load('ball1.png'))
        #~ self.images.append(pygame.image.load('ball2.png'))
        self.maxImage = len(self.images)
        self.currentImage = 0

        #~ self.rect = pygame.Rect(x, y, 80, 80)
        self.rect = self.images[0].get_rect()
        self.rect.x = x
        self.rect.y = y

        self.timeTarget = 10
        self.timeNum = 1

        self.velX = 0
        self.velY = 0

        self.health = 100

        # Jump and gravity
        self.jumping = False
        self.on_ground = False
        self.origJumpVel = 15
        self.jumpVel = self.origJumpVel
        self.gravity = 0.5

    # Jump inputs
    def do_jump(self):
        if self.jumping and not self.on_ground:
            self.velY = -self.jumpVel
            self.jumpVel -= self.gravity

        if self.on_ground:
            self.jumping = False
            self.jumpVel = self.origJumpVel
            self.velY = 0
            self.on_ground = True

    def handle_events(self, event):

        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_SPACE:
                if not self.jumping:
                    self.jumping = True
                    self.on_ground = False

            elif event.key == pygame.K_a:
                self.velX = -5

            elif event.key == pygame.K_d:
                self.velX = +5

        elif event.type == pygame.KEYUP:
            if event.key in (pygame.K_a, pygame.K_d):
                self.velX = 0

    # PLayer updates
    def update(self):
        # Animations
        if self.timeNum == self.timeTarget:
            self.currentImage += 1
            if self.currentImage >= self.maxImage:
                self.currentImage = 0
            self.timeNum = 1

        # Health
        #if self.rect.x == zombie.rect.x:
            #self.health -= 10

        # Screen wrap
        if self.rect.right > 1280:
            self.rect.left = 0

        elif self.rect.left < 0:
            self.rect.right = 1280

    # Player rendering
    def render(self, surface):
        surface.blit(self.images[self.currentImage], self.rect)

如果您想了解我的其他任何问题/挫折,请说明。任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

你有

if self.timeNum == self.timeTarget:
    # ...
    self.timeNum += 1

self.timeNum为1且self.timeTarget为10,因此无法运行且无法更改self.timeNum

您可能需要

if self.timeNum == self.timeTarget:
    # ...
    # inside of `if`
    self.timeNum = 0

# outside of `if`
self.timeNum += 1