2012-11-03 105 views
0

所以,我希望我的玩家精灵在没有真正移动的情况下为动画制作动画,因为我希望它保持在屏幕中间,但它不能正确动画。无法移动的精灵动画

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() 

到目前为止,我只设置控件向右移动,我有两个图像动态显示(,无论是在列表self.images_moveright player_moveright1和player_moveright2)。但是,它只显示第二张图片,但不是第一张,显然,我希望两张图片都是每10张。

回答

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。

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

+0

我做到了,但它表明只有第一个图像, self.images_moveright [0],从来没有第二。 – user1783738

+1

如何调试你的代码?在两个if语句中打印一些东西,并查看它们是否都被执行 –

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] 

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