2017-12-15 20 views
-3

Pygameでゲームをコーディング中に問題が発生しました。'tuple'オブジェクトは呼び出し可能ではありません - Pygame

プレイヤーが撮影できるようにする機能を扱っている間、私はこのエラーを得続ける:「タプル」オブジェクトは、呼び出すことはできません」

私のメインプログラムでは、 『ループ』サブルーチン:

play=True 

    sprites,platforms,player1=GameClass.Game.run('') # Player 1 is defined here. 

    display.fill(WHITE) 
    GameClass.Game.restart(player1) 
    display.fill(WHITE) 


    while play: 
     display.fill(WHITE) 
     GameClass.Game.getevent(player1) 
     platforms.draw(display) 
     sprites.draw(display) 
     pygame.display.update() 

     collision=pygame.sprite.spritecollide(player1,platforms, False) 
     if collision: 
      player1.updateposition(True,False) 

     else: 
      player1.updateposition(False,False) 

ご覧のとおり、player1が定義されています。次に、selfをパラメータとして持つGameClass.Game.geteventを呼び出します。

私はコードをプレーヤー1を渡すと、この行を取得:自己として

if event.type==pygame.MOUSEBUTTONDOWN: 
       if event.button==1: 
        PlayerClasses.Player.shoot(self) 

がまだplayer1に割り当てられている、それが最後のセクションで、箇条書きのクラスに通って移動します。

class Bullet(pygame.sprite.Sprite): 

    def __init__(self,speed,Game): 

     self.speed=speed 
     self.image=pygame.Surface((10,10)) 
     self.rect=self.image.get_rect() 
     #self.x,self.y=Player.exportlocation(player1) 

    def movebullet(self): 
     self.rect.center((self.x+self.speed),self.y) 

私はエラーを取得する:

(必要であれば、ここではよりアップあり)

File "C:\Users\Luke\Desktop\Year13CA\Base.py", line 293, in loop 
    GameClass.Game.getevent(player1) 
    File "C:\Users\Luke\Desktop\Year13CA\GameClass.py", line 64, in getevent 
    PlayerClasses.Player.shoot(self) 
    File "C:\Users\Luke\Desktop\Year13CA\PlayerClasses.py", line 77, in shoot 
    Bullet.movebullet(self) 
    File "C:\Users\Luke\Desktop\Year13CA\PlayerClasses.py", line 96, in movebullet 
    self.rect.center((self.x+self.speed),self.y) 
TypeError: 'tuple' object is not callable 

この問題が発生した理由を私は知りません。

多くのおかげで、 ルーク

+3

'self.rect.center'はタプル、ない機能であるかのように見えます。 – Carcigenicate

+0

'self.rect.center'はどこに定義されていますか? –

答えて

1

それが原因self.rect.center(...)で起こります。 self.rect.centerはおそらくタプルです。代わりに代入する場合は、self.rect.center = ...とします。 the FineManualから

0

(強調は私です):

The Rect object has several virtual attributes which can be used to move and align the Rect:

x,y top, left, bottom, right topleft, bottomleft, topright, bottomright midtop, midleft, midbottom, midright center, centerx, centery size, width, height w,h

All of these attributes can be assigned to:

rect1.right = 10

rect2.center = (20,30)

関連する問題