没有移动的精灵动画

时间:2012-11-03 12:37:00

标签: animation sprite pygame

所以,我希望我的播放器精灵在没有实际移动的情况下为动画制作动画,因为我希望它保持在屏幕中间,但它没有正确的动画。

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帧一次。

2 个答案:

答案 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]

我希望有帮助,我还没有测试过,它就是我会怎么做...