そのため、プレーヤー スプライトを実際に動かさずに動きをアニメートしたいのですが、画面の中央にとどめておきたいのですが、適切にアニメートされません。
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()
これまでのところ、右に移動するためのコントロールのみを設定しており、それをアニメーション化する 2 つの画像があります (player_moveright1 と player_moveright2、両方ともリスト self.images_moveright にあります)。ただし、最初の画像ではなく 2 番目の画像のみが表示されます。明らかに、10 フレームごとに両方が必要です。