2012-04-19 4 views
0

作業:ここpygameのイマイチで私の歩行アニメーション私は仕事にpygameのを使用してpythonで私の歩行アニメーションを取得しようとしていますし、イムは、次のエラーになっ

Traceback (most recent call last): 
    File "C:\Users\name\Desktop\game\game.py", line 37, in <module> 
    player1 = player() 
    File "C:\Users\name\Desktop\game\game.py", line 21, in __init__ 
    self.img = pygame.image.load(self.ani[1]) 
IndexError: list index out of range 

は私のコードです:

from pygame.locals import * 

pygame.init() 
clock = pygame.time.Clock() 

height = 400 
width = 800 
screen = pygame.display.set_mode((width, height), 0, 32) 

class player: 
    def __init__(self): 
     self.x = 200 
     self.y = 300 
     self.ani_speed_init = 10 
     self.ani_speed = self.ani_speed_init 
     self.ani = glob.glob("game\redplayer*.png") 
     self.ani.sort() 
     self.ani_pos = 0 
     self.ani_max = len(self.ani) - 1 
     self.img = pygame.image.load(self.ani[1]) 
     self.update(0) 

    def update(self, pos): 
     if pos != 0: 
      self.ani_speed -= 1 
      self.x += pos 
      if self.ani_speed == 0: 
       self.img = pygame.image.load(self.ani[self.ani_pos]) 
       self.ani_speed = self.ani_speed_init 
       if self.ani_pos == self.ani_max: 
        self.ani_pos = 0 
       else: 
        self.ani_pos += 1 
     screen.blit(self.img,(self.x, self.y)) 

player1 = player() 
pos = 0 

私はファイル名を確認したが、それは考えていないだろうが、それは可能かもしれない。

答えて

1

あなたはself.aniのインデックスに目を通しているようです。 1つのフレームだけを読み込んだので、リストの最初の項目はインデックス0です。

self.img = pygame.image.load(self.ani[0]) 

私のマシン上であなたのコードをうまく動作させるためには、ここでそれがあります。 :) 各アニメーションフレームをプリレンダリングされたサーフェスのリストにプリロードしてから、適切なフレームを画面にblitします。 また、FPSクロックを含む単純なゲームループ(Qを押すと終了します)が追加されました。

import pygame 
from pygame.locals import * 

pygame.init() 
clock = pygame.time.Clock() 
FPS = 30 

width = 800 
height = 600 

screen = pygame.display.set_mode((width, height), 0, 32) 

class player: 
    def __init__(self, init_pos = (10,10), init_ani_speed = 10): 
     self.x = init_pos[0] 
     self.y = init_pos[1] 

     self.ani_speed_init = init_ani_speed 
     self.ani_speed = self.ani_speed_init 

     self.ani = [] 
     # nux-style code here! :) 
     # self.ani.append(glob.glob("game\\redplayer_01*.png")) 
     # self.ani.append(glob.glob("game\\redplayer_02*.png")) 

     self.ani.append("./ani/super_neko_01.png") 
     self.ani.append("./ani/super_neko_02.png") 

     self.ani_max = len(self.ani)-1 
     self.ani_pos = 0 

     self.img = [] 
     for item in self.ani: 
      self.img.append(pygame.image.load(item)) 

     self.update(0) 


    def update(self, pos = 0): 
     # init: starts at 10, immediately blits self to screen at x,y 
     if pos != 0: 
      self.ani_speed -= 1 
      self.x += pos # move right by pos pixels 
      if self.ani_speed == 0: 
       self.ani_speed = self.ani_speed_init 
       if self.ani_pos < self.ani_max: 
        self.ani_pos += 1 
       else: 
        self.ani_pos = 0 

     tempSurf = self.img[self.ani_pos] 
     screen.blit(tempSurf,(self.x, self.y)) 

player1 = player() 

# Main Game Loop 
quit = False 
while quit == False: 
    for event in pygame.event.get(): 
     if (event.type == KEYUP): 
        if (event.key == K_q): 
         quit = True 

    if quit == False: 
     player1.update(1) 
     pygame.display.update() 
    clock.tick(FPS) 

pygame.quit() 
1

"\ r"はキャリッジリターンで、ファイル名は "game <キャリッジリターン> e dplayer * .png "となります。

"game \\ redplayer * .png"またはr "game \ redplayer * .png"を試してください。

+0

または 'import os'' resource_path = 'game''' os.path.join(resource_path、' redplayer * .png ') ' – Darthfett

関連する問題