当前位置: 首页 > 知识库问答 >
问题:

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

孔华池
2023-03-14

你好,我目前正在开发一款生存射击游戏,我目前对一些事情感到沮丧。一个是我的游戏动画不起作用。我这里有播放器类的代码:

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个答案

南宫正阳
2023-03-14

你有

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
 类似资料:
  • 刚开始使用pygame,当你按住箭头键时,试图让一个简单的点在屏幕上移动。目前,它只在你按键时移动,但你必须重复按键。 此外,我很感激你对我目前的代码有任何建议,可以改进或改变,使之更有效。

  • 问题内容: 所以我运行代码,它就开始不正常了。我不熟悉pygame。 代码如下: 这张图片并不是我不能发布视频的那个,但它确实是我的代码的作用 问题答案: 问题是由多次调用 . 在应用程序循环结束时更新显示就足够了。 多次调用or原因 忽隐忽现。 删除对的所有呼叫从你的代码,但调用一次 在应用程序循环结束时: 如果在之后更新显示,将显示在短时间内填充了背景色。然后玩家被抽中 ()显示时,播放器位于

  • 问题是: 所以我在制作这个2D平台游戏时遇到了一个问题。当玩家跳到一个平台上并离开它时,重力不会影响它,它不会掉下来,直到你再次按下跳跃键,就好像它认为它仍然在地面上,直到你更新他。我已经把问题缩小到重力或碰撞,但找不到问题。有人能帮忙吗?我在下面附上代码。 代码:

  • 我正在尝试从pygame的应用商店中复制练习,我已经建立了一个系统,如果你击败了当前的高分,它会把它写进文件中,这样它就可以保存到以后,这样用户就可以尝试击败他们的分数。 每当玩家与一个Rect发生冲突时,它就会增加分数,在主游戏循环中,这个循环被传递为'player_score'以用于死亡屏幕,函数中有一个循环和其他东西,但我想我已经把它缩小到这一部分了。如果需要更多的代码,我可以添加。问题是,

  • 我正在做一个平台游戏,玩家有一把剑。我希望玩家只能在他下面有地面的时候攻击(所以他不能在空中攻击)。所以我实现了这段代码: 但是.. 每次返回零。虽然如果我将添加到测试玩家是否在地面的部分,它仍然存在!(虽然接地仍然等于零) 以下是完整的代码: 有人能帮忙吗?:)

  • 我试着在画布里放一幅画。但就是没有出现。我谷歌了一下,看看哪里出了问题。不幸的是,我还是解决不了。这是我的代码 这是css文件