Pygame 制作键盘动画

3
   import pygame

pygame.init()

window = pygame.display.set_mode((800,600))

pygame.display.set_caption("TEST2")

black=(0,0,0)
white=(255,255,255)

moveX,moveY=0,0

clock = pygame.time.Clock()

class Sprite:

    def __init__(self,x,y):

        self.x=x

        self.y=y

        self.width=50

        self.height=50

        self.i1=pygame.image.load("Sprite0.PNG")

        self.i2 = pygame.image.load("Sprite1.PNG")

        self.i3 = pygame.image.load("Sprite2.PNG")

        self.i4 = pygame.image.load("Sprite3.PNG")

        self.i5 = pygame.image.load("Sprite4.PNG")

        self.i6 = pygame.image.load("Sprite5.PNG")

        self.i7 = pygame.image.load("Sprite6.PNG")

        self.i8 = pygame.image.load("Sprite7.PNG")

        self.i9 = pygame.image.load("Sprite8.PNG")

        self.i10 = pygame.image.load("Sprite9.PNG")

        self.i11 = pygame.image.load("Sprite10.PNG")

        self.i12 = pygame.image.load("Sprite11.PNG")

        self.timeTarget=10

        self.timeNum=0

        self.currentImage=0

    def update(self):
        self.timeNumber+=1

        if(self.timeNume==self.timeTarget):

            if (self.currentImage==0):

                self.currentImage+=1

            else:
                self.currentImage=0

            self.timeNum=0

        self.render()

    def render(self):

        if (self.currentImage==0):

            window.blit(self.i1, (self.x,self.y))

        else:

            window.blit(self.i2, (self.x,self.y))

player=Sprite(100,150)
gameLoop = True
while gameLoop:

    for event in pygame.event.get():

        if event.type==pygame.QUIT:

            gameLoop = False

        if (event.type==pygame.KEYDOWN):

            if (event.key==pygame.K_LEFT):

                moveX = -3

            if (event.key==pygame.K_RIGHT):

                moveX = 3

            if (event.key==pygame.K_UP):

                moveY = -3

        if (event.key==pygame.K_DOWN):

            moveY = 3

        if (event.type==pygame.KEYUP):

            if (event.key==pygame.K_LEFT):

                moveX=0

            if (event.key==pygame.K_RIGHT):

                moveX=0

            if (event.key==pygame.K_UP):

                moveY=0

            if (event.key==pygame.K_DOWN):

                moveY=0

    window.fill(black)

    player.x+=moveX

    player.x+=moveY

    player.update()

    clock.tick(50)

    pygame.display.flip()

pygame.quit()

所以这是我的问题,我想制作一个动态的键盘动画,但当我点击运行时甚至没有弹出窗口,Idle似乎没有代码错误,但当我点击运行时什么都不发生。如果您看到我有错误,请告诉我,我仍在尝试学习整个pygame,并且对Python还很新。谢谢!
编辑:(我找到了错误,但仍然不知道如何修复它)
Traceback (most recent call last):
  File "C:/Users/Trevor/Downloads/TEST/images/TEST2", line 84, in <module>
    player=Sprite(100,150)
  File "C:/Users/Trevor/Downloads/TEST/images/TEST2", line 28, in __init__
    self.i0=pygame.image.load("Sprite0.PNG")
error: Couldn't open Sprite0.PNG

现在你的问题出在图片上了 - 检查一下某些浏览器中的Sprite0.PNG - 或者用新图片来代替它。 - furas
2个回答

3

您需要在放置Sprite0.png的目录中运行脚本。首先使用cd命令切换到该目录,然后使用python myprogram.py命令运行脚本。或者您可以使用绝对路径进行加载。因此,您可以使用pygame.image.load("my/path/to/Sprite0.png")代替pygame.image.load("Sprite0.PNG")


好的,是的,那个有效,谢谢!图片可以正常显示,但似乎只有前两张图片在动画中,有没有办法将所有图片都添加到动画中呢? - Python-Pygames-help.me
我不确定你在问什么。你可以以同样的方式加载所有图像。 - XrXr
我明白你的意思。你的渲染函数只绘制了前两帧。这就是为什么。 - XrXr
好的,所以在我的渲染函数中,我使用window.blit将其余图像放置在else下面,但是当我运行时,这些图像重叠了。可能还需要添加其他内容,或者这只是与我的图像有关的问题? - Python-Pygames-help.me
在更新图像之前,您需要用黑色填充屏幕,否则上一张图片仍会存在。window.fill(pygame.Color("black")) - XrXr

2

上述错误告诉您它无法完成的确切内容。

有两件事情可以做。使用cd进入图像目录,并将它们移动到程序目录中。

您也可以使用图像的路径,例如:

如果图像在我的主目录中,我将使用/Users/ZenOfPython/image.png而不是image.png


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接