2017-10-06 80 views
0

当我使用player方法,它给了我很错误:当我使用的方法,我得到一个类型错误:“pygame.Surface”对象不是可调用,

TypeError: 'pygame.Surface' object is not callable".

不过,我不知道当我使用相同的东西但没有使用该方法时有任何问题(参见上面的行)。我不知道为什么。我是一个新手,可以使用一些帮助。

这里是整个代码:

import pygame 
from pygame.locals import * 
from sys import exit 

class Plane(object): 
    def __init__(self,screen_temp): 
     self.image = pygame.image.load('resources/image/shoot.png') 
     self.rect = pygame.Rect(0,99,102,126) 
     self.player = self.image.subsurface(self.rect) 

     self.player_pos = [200,600] 
     self.screen = screen_temp 

    def player(self): 
     self.screen.blit(self.player,self.player_pos) 

    def key_press(self): 
     key_press = pygame.key.get_pressed() 
     if key_press[K_UP]: 
      self.player_pos[1]-=5 
     if key_press[K_DOWN]: 
      self.player_pos[1]+=5 
     if key_press[K_LEFT]: 
      self.player_pos[0]-=5 
     if key_press[K_RIGHT]: 
      self.player_pos[0]+=5 


def main(): 
    screen = pygame.display.set_mode((480,800)) 
    pygame.display.set_caption("飞机大战") 

    background = pygame.image.load('resources/image/background.png') 

    plane = Plane(screen) 

    while True: 
     screen.blit(background,(0,0)) 
     #plane.screen.blit(plane.player,plane.player_pos) this can work 
     plane.player() # this will get a TypeError 

     pygame.display.update() 
     plane.key_press() 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       exit() 

if __name__ == "__main__": 
    main() 

回答

0

您正在定义Plane.player两次:

  • 的属性self.player = self.image.subsurface(self.rect)
  • 的方法def player(self):

这两个发生碰撞并可以通过重命名其中一个来修复。

+1

非常感谢!你解决了我的问题!它帮助我很多 –

相关问题