Animation 不移动的精灵动画 P>所以,我希望我的播放器精灵在没有实际移动的情况下动画移动,因为我希望它保持在屏幕中间,但是它没有动画。 import pygame, sys from pygame.locals import * # Game window setup pygame.init() screen=pygame.display.set_mode((0,0), FULLSCREEN) # Colour setup green=(0,255,0) white=(255,255,255) black=(0,0,0) # Speed in pixels per frame x_speed=0 y_speed=0 # Defining the character class Player(pygame.sprite.Sprite): # This is a frame counter used to determing which image to draw frame = 0 # Constructor def __init__(self): # Call the parent class (Sprite) constructor pygame.sprite.Sprite.__init__(self) # Lists that the character images will be saved in. self.images_moveright=[] self.images_moveleft=[] self.images_movedown=[] self.images_moveup=[] # Load default character image img=pygame.image.load("Player_images\character_default.png") for i in range(1,3): down = pygame.image.load("Player_images\character_movedown"+str(i)+".png").convert() down.set_colorkey(white) self.images_movedown.append(down) left=pygame.image.load("Player_images\character_moveleft"+str(i)+".png").convert #left.set_colorkey(white) self.images_moveleft.append(left) right=pygame.image.load("Player_images\character_moveright"+str(i)+".png").convert() right.set_colorkey(white) self.images_moveright.append(right) up=pygame.image.load("Player_images\character_moveup"+str(i)+".png").convert() up.set_colorkey(white) self.images_moveup.append(up) self.image=img self.rect=self.image.get_rect() def moveright(self): if self.frame<10: self.image=self.images_moveright[0] self.frame+=1 if self.frame>=10: self.image=self.images_moveright[1] if self.frame==20: self.frame=0 player=Player() # Current position of player and background screen_width=screen.get_width() screen_height=screen.get_height() player_x_coord=screen_width/2 player_y_coord=screen_height/2 background_initial_coordx=0 background_initial_coordy=0 player.rect.x=player_x_coord player.rect.y=player_y_coord background=pygame.image.load("background0.png").convert() all_sprites_list=pygame.sprite.RenderPlain() all_sprites_list.add(player) # Used to manage how fast the screen updates clock=pygame.time.Clock() # Main game loop while 1: for event in pygame.event.get(): if event.type==QUIT: pygame.quit() sys.exit() # Control definition elif event.type == KEYDOWN: if event.key == K_ESCAPE: pygame.quit() sys.exit() if event.key == pygame.K_LEFT: x_speed=3 if event.key == pygame.K_RIGHT: player.moveright() x_speed=-3 if event.key == pygame.K_UP: y_speed=3 if event.key == pygame.K_DOWN: y_speed=-3 if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT: x_speed=0 if event.key == pygame.K_RIGHT: x_speed=0 if event.key == pygame.K_UP: y_speed=0 if event.key == pygame.K_DOWN: y_speed=0 # Update of game map background_initial_coordx += x_speed background_initial_coordy += y_speed screen.fill(black) time=pygame.time.get_ticks() screen.blit(background, [background_initial_coordx, background_initial_coordy]) all_sprites_list.draw(screen) clock.tick(60) print(time) pygame.display.flip() import pygame,sys 从pygame.locals导入* #游戏窗口设置 pygame.init() screen=pygame.display.set_模式((0,0),全屏) #色彩设置 绿色=(0255,0) 白色=(255255) 黑色=(0,0,0) #速度(以每帧像素为单位) x_速度=0 y_速度=0 #定义角色 职业玩家(pygame.sprite.sprite): #这是一个帧计数器,用于确定要绘制的图像 帧=0 #建造师 定义初始化(自): #调用父类(Sprite)构造函数 pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我) #列出将保存在其中的角色图像。 self.images\u moveright=[] self.images\u moveleft=[] self.images\u movedown=[] self.images\u moveup=[] #加载默认字符图像 img=pygame.image.load(“Player\u images\character\u default.png”) 对于范围(1,3)内的i: down=pygame.image.load(“Player\u images\character\u movedown”+str(i)+“.png”).convert() 向下。设置颜色键(白色) self.images\u movedown.append(向下) left=pygame.image.load(“Player\u images\character\u moveleft”+str(i)+.png”).convert #左。设置颜色键(白色) self.images\u moveleft.append(左) right=pygame.image.load(“Player\u images\character\u moveright”+str(i)+“.png”).convert() 右。设置颜色键(白色) self.images\u moveright.append(右) up=pygame.image.load(“Player\u images\character\u moveup”+str(i)+“.png”).convert() 设置颜色键(白色) self.images\u moveup.append(向上) self.image=img self.rect=self.image.get_rect() def右移动(自身): 如果self.frame=10: self.image=self.images\u moveright[1] 如果self.frame==20: self.frame=0 player=player() #玩家的当前位置和背景 screen\u width=screen.get\u width() screen\u height=screen.get\u height() 玩家x坐标=屏幕宽度/2 玩家坐标=屏幕高度/2 背景\u初始\u坐标=0 背景\初始\协调=0 player.rect.x=player\u x\u坐标 player.rect.y=player\u y\u坐标 background=pygame.image.load(“background0.png”).convert() 所有精灵列表=pygame.sprite.RenderPlain() 所有精灵列表。添加(玩家) #用于管理屏幕更新的速度 clock=pygame.time.clock() #主游戏循环 而1: 对于pygame.event.get()中的事件: 如果event.type==退出: pygame.quit() sys.exit() #控制定义 elif event.type==KEYDOWN: 如果event.key==K_转义: pygame.quit() sys.exit() 如果event.key==pygame.K_左: x_速度=3 如果event.key==pygame.K_RIGHT: player.moveright() x_速度=-3 如果event.key==pygame.K_UP: y_速度=3 如果event.key==pygame.K_向下: y_速度=-3 如果event.type==pygame.KEYUP: 如果event.key==pygame.K_左: x_速度=0 如果event.key==pygame.K_RIGHT: x_速度=0 如果event.key==pygame.K_UP: y_速度=0 如果event.key==pygame.K_向下: y_速度=0 #更新游戏地图 背景\u初始\u坐标x+=x\u速度 背景\初始\协调+=y \速度 屏幕填充(黑色) time=pygame.time.get_ticks() blit(背景,[background\u initial\u coordx,background\u initial\u coordy]) 所有精灵列表。绘制(屏幕) 时钟滴答(60) 打印(时间) pygame.display.flip()

Animation 不移动的精灵动画 P>所以,我希望我的播放器精灵在没有实际移动的情况下动画移动,因为我希望它保持在屏幕中间,但是它没有动画。 import pygame, sys from pygame.locals import * # Game window setup pygame.init() screen=pygame.display.set_mode((0,0), FULLSCREEN) # Colour setup green=(0,255,0) white=(255,255,255) black=(0,0,0) # Speed in pixels per frame x_speed=0 y_speed=0 # Defining the character class Player(pygame.sprite.Sprite): # This is a frame counter used to determing which image to draw frame = 0 # Constructor def __init__(self): # Call the parent class (Sprite) constructor pygame.sprite.Sprite.__init__(self) # Lists that the character images will be saved in. self.images_moveright=[] self.images_moveleft=[] self.images_movedown=[] self.images_moveup=[] # Load default character image img=pygame.image.load("Player_images\character_default.png") for i in range(1,3): down = pygame.image.load("Player_images\character_movedown"+str(i)+".png").convert() down.set_colorkey(white) self.images_movedown.append(down) left=pygame.image.load("Player_images\character_moveleft"+str(i)+".png").convert #left.set_colorkey(white) self.images_moveleft.append(left) right=pygame.image.load("Player_images\character_moveright"+str(i)+".png").convert() right.set_colorkey(white) self.images_moveright.append(right) up=pygame.image.load("Player_images\character_moveup"+str(i)+".png").convert() up.set_colorkey(white) self.images_moveup.append(up) self.image=img self.rect=self.image.get_rect() def moveright(self): if self.frame<10: self.image=self.images_moveright[0] self.frame+=1 if self.frame>=10: self.image=self.images_moveright[1] if self.frame==20: self.frame=0 player=Player() # Current position of player and background screen_width=screen.get_width() screen_height=screen.get_height() player_x_coord=screen_width/2 player_y_coord=screen_height/2 background_initial_coordx=0 background_initial_coordy=0 player.rect.x=player_x_coord player.rect.y=player_y_coord background=pygame.image.load("background0.png").convert() all_sprites_list=pygame.sprite.RenderPlain() all_sprites_list.add(player) # Used to manage how fast the screen updates clock=pygame.time.Clock() # Main game loop while 1: for event in pygame.event.get(): if event.type==QUIT: pygame.quit() sys.exit() # Control definition elif event.type == KEYDOWN: if event.key == K_ESCAPE: pygame.quit() sys.exit() if event.key == pygame.K_LEFT: x_speed=3 if event.key == pygame.K_RIGHT: player.moveright() x_speed=-3 if event.key == pygame.K_UP: y_speed=3 if event.key == pygame.K_DOWN: y_speed=-3 if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT: x_speed=0 if event.key == pygame.K_RIGHT: x_speed=0 if event.key == pygame.K_UP: y_speed=0 if event.key == pygame.K_DOWN: y_speed=0 # Update of game map background_initial_coordx += x_speed background_initial_coordy += y_speed screen.fill(black) time=pygame.time.get_ticks() screen.blit(background, [background_initial_coordx, background_initial_coordy]) all_sprites_list.draw(screen) clock.tick(60) print(time) pygame.display.flip() import pygame,sys 从pygame.locals导入* #游戏窗口设置 pygame.init() screen=pygame.display.set_模式((0,0),全屏) #色彩设置 绿色=(0255,0) 白色=(255255) 黑色=(0,0,0) #速度(以每帧像素为单位) x_速度=0 y_速度=0 #定义角色 职业玩家(pygame.sprite.sprite): #这是一个帧计数器,用于确定要绘制的图像 帧=0 #建造师 定义初始化(自): #调用父类(Sprite)构造函数 pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我) #列出将保存在其中的角色图像。 self.images\u moveright=[] self.images\u moveleft=[] self.images\u movedown=[] self.images\u moveup=[] #加载默认字符图像 img=pygame.image.load(“Player\u images\character\u default.png”) 对于范围(1,3)内的i: down=pygame.image.load(“Player\u images\character\u movedown”+str(i)+“.png”).convert() 向下。设置颜色键(白色) self.images\u movedown.append(向下) left=pygame.image.load(“Player\u images\character\u moveleft”+str(i)+.png”).convert #左。设置颜色键(白色) self.images\u moveleft.append(左) right=pygame.image.load(“Player\u images\character\u moveright”+str(i)+“.png”).convert() 右。设置颜色键(白色) self.images\u moveright.append(右) up=pygame.image.load(“Player\u images\character\u moveup”+str(i)+“.png”).convert() 设置颜色键(白色) self.images\u moveup.append(向上) self.image=img self.rect=self.image.get_rect() def右移动(自身): 如果self.frame=10: self.image=self.images\u moveright[1] 如果self.frame==20: self.frame=0 player=player() #玩家的当前位置和背景 screen\u width=screen.get\u width() screen\u height=screen.get\u height() 玩家x坐标=屏幕宽度/2 玩家坐标=屏幕高度/2 背景\u初始\u坐标=0 背景\初始\协调=0 player.rect.x=player\u x\u坐标 player.rect.y=player\u y\u坐标 background=pygame.image.load(“background0.png”).convert() 所有精灵列表=pygame.sprite.RenderPlain() 所有精灵列表。添加(玩家) #用于管理屏幕更新的速度 clock=pygame.time.clock() #主游戏循环 而1: 对于pygame.event.get()中的事件: 如果event.type==退出: pygame.quit() sys.exit() #控制定义 elif event.type==KEYDOWN: 如果event.key==K_转义: pygame.quit() sys.exit() 如果event.key==pygame.K_左: x_速度=3 如果event.key==pygame.K_RIGHT: player.moveright() x_速度=-3 如果event.key==pygame.K_UP: y_速度=3 如果event.key==pygame.K_向下: y_速度=-3 如果event.type==pygame.KEYUP: 如果event.key==pygame.K_左: x_速度=0 如果event.key==pygame.K_RIGHT: x_速度=0 如果event.key==pygame.K_UP: y_速度=0 如果event.key==pygame.K_向下: y_速度=0 #更新游戏地图 背景\u初始\u坐标x+=x\u速度 背景\初始\协调+=y \速度 屏幕填充(黑色) time=pygame.time.get_ticks() blit(背景,[background\u initial\u coordx,background\u initial\u coordy]) 所有精灵列表。绘制(屏幕) 时钟滴答(60) 打印(时间) pygame.display.flip(),animation,sprite,pygame,Animation,Sprite,Pygame,到目前为止,我只设置了向右移动的控件,我有两个图像来设置动画(player_moveright1和player_moveright2,都在list self.images_moveright中)。但是,它只显示第二个图像,而不显示第一个图像,很明显,我希望每10帧显示两个图像。在函数中 def moveright(self): if self.frame<10: self.image=self.images_moveright[0] self.fra

到目前为止,我只设置了向右移动的控件,我有两个图像来设置动画(player_moveright1和player_moveright2,都在list self.images_moveright中)。但是,它只显示第二个图像,而不显示第一个图像,很明显,我希望每10帧显示两个图像。

在函数中

def moveright(self):
    if self.frame<10:
        self.image=self.images_moveright[0]
        self.frame+=1
    if self.frame>=10:
        self.image=self.images_moveright[1]
        if self.frame==20:
            self.frame=0
def moveright(自):
如果self.frame=10:
self.image=self.images\u moveright[1]
如果self.frame==20:
self.frame=0
你没有增加你的自我框架


将self.frame+=1移动到函数末尾以解决此问题。

我认为每次按向右键时,您只需迭代self.frame一次。这意味着你必须反复点击右键才能改变它。我会这样做:

def moveRight():
  self.image_list = self.images_moveright

// in your main loop call something like this, which is a method of your player

def playerTick(self):
  self.ticker += 1
  if self.ticker >= 10:
    self.ticker = 0
    self.frame += 1
    if self.frame >= 1: // i think you could use >= self.image_list.len() - 1
      self.frame = 0
      self.image = image_list[self.frame]

我希望这会有所帮助,我还没有测试它,它只是我将如何做…

我做了,但它只显示第一个图像,self.images\u moveright[0],而从不显示第二个。调试代码怎么样?在两个if语句中打印一些内容,然后查看它们是否都已执行