2013-06-29 21 views
1

嘿,夥計們,我不知道什麼是我的Python/pygame的遊戲走錯了它不斷給我這個錯誤時,嘗試與IDLE全局名稱自是沒有定義的python

Traceback (most recent call last): 
    File "C:/code/gmaes/game/adad.py", line 102, in <module> 
    Game().main(screen) 
    File "C:/code/gmaes/game/adad.py", line 95, in main 
    self.tilemap.update(dt/1000.,self) 
    File "C:/code/gmaes/game\tmx.py", line 689, in update 
    layer.update(dt, *args) 
    File "C:\Python27\lib\site-packages\pygame\sprite.py", line 399, in update 
    for s in self.sprites(): s.update(*args) 
    File "C:/code/gmaes/game/adad.py", line 36, in update 
    if self.resting and key[pygame.K_SPCAE]: 
NameError: global name 'self' is not defined 

我不運行它不知道爲什麼即時通訊出現這個錯誤,我以前從未得到過這個問題,我希望你們和女孩們能夠幫忙。這裏是我完整的代碼,看看,並留下您的想法

主運行文件對於Python遊戲!巨蟒/ pygame的

import pygame 
import tmx 

class Player(pygame.sprite.Sprite): 
    def __init__(self,location,frames,*groups): 
     super(Player,self).__init__(*groups) 
     self.frame = 0 
     self.frames = frames 
     self.image = self.frames[self.frame] 
     self.rect = pygame.rect.Rect(location,self.image.get_size()) 
     self.resting = False 
     self.dy = 0 
     self.is_dead = False 
     self.direction = 1 
    def update(slef,dt,game): 
     last = slef.rect.copy 
     key = pygame.key.get_pressed() 
     if key[pygame.K_LEFT]: 
       self.rect -= 300 * dt 
       self.direction = -1 
       self.frame = self.frame 
       self.frame += 1 
       self.image = self.frames[frame] 
       if self.frame > 2: 
         self.frame = 0 
     if key[pygame.K_RIGHT]: 
       self.rect -= 300 * dt 
       self.direction = 1 
       self.frame = self.frame 
       slef.frame += 1 
       self.image = self.frames[frame] 
     if slef.frame > 2: 
       self.frame = 0 

     if self.resting and key[pygame.K_SPACE]: 
       self.dy = -500 
     self.dy = min(400,self.dy + 40) 
     self.rect.y += self.dy * dt 

     new = self.rect 
     self.resting = False 

     for cell in game.tilemap.layers['triggers'].collide(new,'blockers'): 
      blockers = cell['blockers'] 
      if 'l' in blockers and last.right <= cell.left and new.right > cell.left: 
       new.right = cell.left 
      if 'r' in blockers and last.left >= cell.right and new.left < cell.right: 
       new.left = cell.right 
      if 't' in blockers and last.bottom <= cell.top and new.bottom > cell.top: 
       self.resting = True 
       new.bottom = cell.top 
       self.dy = 0 
      if 'b' in blockers and last.top >= cell.bottom and new.top < cell.bottom: 
       new.top = cell.bottom 
       self.dy = 0 
      game.tilemap.set_focus(new.x,new.y) 


class sprite_system(object): 
    def slice_sheet(self,sprite_sheet,sprite_start_x,sprite_start_y,sprite_size_x,sprite_size_y,sheet_frames): 
     frame = [] 
     sheet_start = 1 
     frame_pos = 0 
     sprite_start_x_base = sprite_size_x 
     while sheet_start <= sheet_frames: 
      sheet = sprite_sheet 
      sheet.set_clip(pygame.Rect(sprite_start_x,sprite_start_y,sprite_size_x,sprite_size_y)) 
      sprite_clip = sheet.subsurface(sheet.get_clip()) 
      frame.append(sprite_clip) 
      sprite_start_x += sprite_start_x_base 
      sheet_start += 1 
     return frame 


class Game(object): 
    def main(self,screen): 
     sprite = pygame.image.load('test.png') 
     frames = sprite_system().slice_sheet(sprite,0,0,64,64,4) 
     clock = pygame.time.Clock() 
     self.tilemap = tmx.load('lvl1.tmx',screen.get_size()) 
     self.sprites = tmx.SpriteLayer() 
     start_cell = self.tilemap.layers['triggers'].find('player')[0] 
     self.player = Player((start_cell.px,start_cell.py),frames,self.sprites) 
     self.tilemap.layers.append(self.sprites) 

     while 1: 
      dt = clock.tick(30) 

      for event in pygame.event.get(): 
       if event.type == pygame.QUIT: 
         return 
       if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: 
         return 
      self.tilemap.update(dt/1000.,self) 
      self.tilemap.draw(screen) 
      pygame.display.flip() 

if __name__ == '__main__': 
    pygame.init() 
    screen = pygame.display.set_mode((854,480)) 
    Game().main(screen) 

噢,這裏的代碼失敗

if self.resting and key[pygame.K_SPACE]: 
     self.dy = -500 
     self.dy = min(400,self.dy + 40) 
     self.rect.y += self.dy * dt 

     new = self.rect 
     self.resting = False 
的snipet
+0

錯字有意思的是,你似乎也有一個錯字在你回溯..'K_SPCAE' –

回答

4

在您的功能update()中,您忘記添加self作爲您的第一個參數。

,或者它只是一個slef

+0

哇即時慢感謝這麼多! – IdecEddy

+0

@IdecEddy不客氣:)。 – TerryA

+0

這可能是一個延伸,但還有另一個錯誤,我得到與AttributeError:'builtin_function_or_method'對象沒有屬性'權利' 與行 如果'l'在阻滯劑和last.right <= cell.left和新。 right> cell.left: 我認爲它與tmx lib im有關,但是確實不知道該怎麼做。你知道我應該從哪裏開始尋找 – IdecEddy

相關問題