Python 使用多个图像重叠/不工作的Pygame动画

Python 使用多个图像重叠/不工作的Pygame动画,python,animation,pygame,Python,Animation,Pygame,我所做的是尝试用pygame将11张照片制作成动画。这段代码可以工作,但当我运行它时,图片似乎几乎重叠。我对前几张图片做了window.blit,并将它们放在下的else?我觉得我把他们弄错了。此外,我必须补充一点,我真的很不善于理解人们想说的话,最好从例子中学习。谢谢 通过将所有那些window.blit(…)调用一个接一个地放在一起,您可以将这三个框架相互叠加。即使您的计算机在每次调用之间延迟一秒钟,您仍然无法单独看到它们,因为它们在调用pygame.display.flip()之前都无法显

我所做的是尝试用pygame将11张照片制作成动画。这段代码可以工作,但当我运行它时,图片似乎几乎重叠。我对前几张图片做了
window.blit
,并将它们放在
下的else
?我觉得我把他们弄错了。此外,我必须补充一点,我真的很不善于理解人们想说的话,最好从例子中学习。谢谢

通过将所有那些
window.blit(…)
调用一个接一个地放在一起,您可以将这三个框架相互叠加。即使您的计算机在每次调用之间延迟一秒钟,您仍然无法单独看到它们,因为它们在调用
pygame.display.flip()
之前都无法显示

您应该将图像存储在一个列表中,并保留一个类似于
currentFrame
的计数器,该计数器从
0
循环到
numberofu-frames-1
(或
len(frames)-1
)。然后,在游戏的每一帧中,您都会执行以下操作:

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=100

        self.height=110

        self.i100 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite0.PNG")

        self.i1 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite1.PNG")

        self.i2 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite2.PNG")

        self.i3 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite3.PNG")

        self.i4 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite4.PNG")

        self.i5 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite5.PNG")

        self.i6 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite6.PNG")

        self.i7 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite7.PNG")

        self.i8 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite8.PNG")

        self.i9 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite9.PNG")

        self.i10 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite10.PNG")

        self.i11 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite11.PNG")

        self.timeTarget=10

        self.timeNum=0

        self.currentImage=0

    def update(self):

        self.timeNum+=1

        if(self.timeNum==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.i100, (self.x,self.y))

        else:

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

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

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

player=Sprite(110,100)
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()

通过将所有这些
window.blit(…)
调用一个接一个地放在一起,您可以将这三个框架相互重叠。即使您的计算机在每次调用之间延迟一秒钟,您仍然无法单独看到它们,因为它们在调用
pygame.display.flip()
之前都无法显示

您应该将图像存储在一个列表中,并保留一个类似于
currentFrame
的计数器,该计数器从
0
循环到
numberofu-frames-1
(或
len(frames)-1
)。然后,在游戏的每一帧中,您都会执行以下操作:

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=100

        self.height=110

        self.i100 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite0.PNG")

        self.i1 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite1.PNG")

        self.i2 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite2.PNG")

        self.i3 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite3.PNG")

        self.i4 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite4.PNG")

        self.i5 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite5.PNG")

        self.i6 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite6.PNG")

        self.i7 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite7.PNG")

        self.i8 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite8.PNG")

        self.i9 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite9.PNG")

        self.i10 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite10.PNG")

        self.i11 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite11.PNG")

        self.timeTarget=10

        self.timeNum=0

        self.currentImage=0

    def update(self):

        self.timeNum+=1

        if(self.timeNum==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.i100, (self.x,self.y))

        else:

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

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

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

player=Sprite(110,100)
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()

顺便说一句:您的代码可能如下所示:

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=100

        self.height=110

        self.i100 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite0.PNG")

        self.i1 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite1.PNG")

        self.i2 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite2.PNG")

        self.i3 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite3.PNG")

        self.i4 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite4.PNG")

        self.i5 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite5.PNG")

        self.i6 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite6.PNG")

        self.i7 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite7.PNG")

        self.i8 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite8.PNG")

        self.i9 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite9.PNG")

        self.i10 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite10.PNG")

        self.i11 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite11.PNG")

        self.timeTarget=10

        self.timeNum=0

        self.currentImage=0

    def update(self):

        self.timeNum+=1

        if(self.timeNum==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.i100, (self.x,self.y))

        else:

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

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

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

player=Sprite(110,100)
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()
我在示例中使用了我的图像,但仍然有与您的图像相关的线条

我使用计时器更改图像。
您可以按空格键暂停,按escape键退出

等等

ball1.png ball2.png
ball3.png

顺便说一句:您的代码可能如下所示:

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=100

        self.height=110

        self.i100 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite0.PNG")

        self.i1 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite1.PNG")

        self.i2 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite2.PNG")

        self.i3 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite3.PNG")

        self.i4 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite4.PNG")

        self.i5 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite5.PNG")

        self.i6 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite6.PNG")

        self.i7 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite7.PNG")

        self.i8 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite8.PNG")

        self.i9 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite9.PNG")

        self.i10 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite10.PNG")

        self.i11 = pygame.image.load("C:/Users/Trevor/SkyDrive/Documents/TEST2.0/Sprite11.PNG")

        self.timeTarget=10

        self.timeNum=0

        self.currentImage=0

    def update(self):

        self.timeNum+=1

        if(self.timeNum==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.i100, (self.x,self.y))

        else:

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

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

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

player=Sprite(110,100)
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()
我在示例中使用了我的图像,但仍然有与您的图像相关的线条

我使用计时器更改图像。
您可以按空格键暂停,按escape键退出

等等

ball1.png ball2.png
ball3.png

使用图像列表
images=[]
。使用
加载所有图像更容易,从列表中获取下一个图像到屏幕上的blit也更容易。使用图像列表
图像=[]
。使用
加载所有图像更容易,从列表中获取下一张图像到屏幕上的blit也更容易。