2016-08-14 30 views
0

私はpygameの使い方を学び、同じスプライトで複数の画像を使用しようとしています。キーボードのボタンを押すと、スプライトの画像が変わります。私は、右矢印キーを押して、スプライトの画像を変更しようとするたびに、私はエラーを取得する:ここでpygameで同じスプライトの複数の画像を使用するにはどうすればよいですか?

Traceback (most recent call last): 
    File "C:\Users\theotheo36\workspace\NomadsPie\main.py", line 55, in <module> 
    game.execute() 
    File "C:\Users\theotheo36\workspace\NomadsPie\main.py", line 50, in execute 
    self.render() 
    File "C:\Users\theotheo36\workspace\NomadsPie\main.py", line 32, in render 
    self.all.draw(self.screen) 
    File "C:\Users\theotheo36\Downloads\WinPython-64bit-3.4.4.3Qt5\python-3.4.4.amd64\lib\site-packages\pygame\sprite.py", line 475, in draw 
    self.spritedict[spr] = surface_blit(spr.image, spr.rect) 
TypeError: invalid destination position for blit 

は私のコードです:

import pygame 
from pygame.locals import * 
class Camel(pygame.sprite.Sprite): 
    def __init__(self,x,y): 
     super().__init__() 
     self.faceleft=True 
     self.faceright=False 
     self.image=pygame.image.load('camel.png').convert() 
     self.rect=self.image.get_rect() 
     self.rect.x=x 
     self.rect.y=y 
    def look(self): 
     if self.faceleft==True: 
      self.image=pygame.image.load('camel.png').convert() 
      self.rect=self.image.get_rect() 
     elif self.faceright==True: 
      self.image=pygame.image.load('camelright.png').convert() 
      self.rect=self.image.get_rect 



class Game(Camel): 
    def __init__(self): 
     pygame.init() 
     self.screen=pygame.display.set_mode((800,800)) 
     self.all=pygame.sprite.Group() 
     self.camel=Camel(200,200) 
     self.all.add(self.camel) 
     self.running=True 
    def render(self): 
     self.screen.fill((255,255,255)) 
     self.all.draw(self.screen) 
     pygame.display.update() 
    def events(self,event): 
     if event.type==pygame.QUIT: 
      self.running=False 
     if event.type==KEYDOWN: 
      if event.key==K_RIGHT: 
       self.camel.faceleft=False 
       self.camel.faceright=True 
       self.camel.look() 
      if event.key==K_LEFT: 
       self.camel.faceright=False 
       self.camel.faceleft=True 
       self.camel.look() 
    def collisons(self): 
     pass 
    def execute(self): 
     while (self.running): 
      self.render() 
      for event in pygame.event.get(): 
       self.events(event) 

game=Game() 
game.execute() 

答えて

0

あなたlook方法でself.rect=self.image.get_rect後に括弧を忘れないでください。かっこなしでは、返された矩形の代わりに関数にself.rectが割り当てられます。この矩形はイメージを描画するために使用されるため、この位置エラーが発生します。

関連する問題