所以,我希望我的播放器精灵在没有实际移动的情况下为动画制作动画,因为我希望它保持在屏幕中间,但它没有正确的动画。
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()
到目前为止,我只设置了向右移动的控件,我有两个图像来设置动画(player_moveright1和player_moveright2,两者都在列表self.images_moveright中)。但是,它只显示第二个图像,但不显示第一个图像,显然,我希望每10帧一次。
答案 0 :(得分:0)
在你的功能中
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
你没有增加你的自我框架。
将self.frame + = 1移动到函数末尾以解决此问题。
答案 1 :(得分:0)
我认为每次按右键时,你只会迭代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]
我希望有帮助,我还没有测试过,它就是我会怎么做...