2011-09-05 65 views
0

我在玩Pygame(自己从安迪哈里斯2007年的书“Game Programming”中学到了自己。)为什么我不能让我的Pygame Sprite在OSX上移动?

他给出了几个移动精灵的例子。我没有看到他的例子和我的代码之间的区别,但我的精灵(我制作的鱼jpeg)不移动。这个“岛”也是我制作的jpeg。基本上,鱼应该每帧水平移动5个像素。但是,它只是坐在那里。也许我只是忽视了一些显而易见的东西,或者说我的系统出了问题(我安装了几个版本的Python,看起来运行游戏的版本是import error, no module named scrap)。

[编辑:我删除了所有我的疯狂OSX的东西B/C它是相当分散注意力,这是没有问题的。

import pygame 
pygame.init() 

screen = pygame.display.set_mode((800, 600)) 
background = pygame.image.load('island_background.jpg') 
background = background.convert() 

class Fish(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load('fish.jpg') 
     self.image = self.image.convert() 
     self.rect = self.image.get_rect() 
     self.rect.centerx = (600) 
     self.rect.centery = (500) 
     self.dx = 5 

    def update(self): 
     self.rect.centerx += self.dx 


def main(): 
    keepgoing = True 
    clock = pygame.time.Clock() 
    fish = Fish() 
    allsprites = pygame.sprite.Group(fish) 

    while keepgoing: 
     clock.tick(30) 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       keepgoing = False 

     screen.blit(background, (0, 0)) 

     allsprites.clear(screen, background) 
     #I thought the line above might be a problem, 
     #but commented it out and nothing changed (well, maybe I got a 
     #black background, but I don't recall. The fish just sat there in 
     #the same spot still 

     allsprites.update 
     allsprites.draw(screen) 

     pygame.display.flip() 

if __name__ == '__main__': 
    main()  

回答

3

我是安迪我直接回答你的电子邮件 (你使用一书的作者),但如果其他人在读,我会张贴在这里的SO社会的福祉。

这不是与OSX在所有问题。
所有MAC的东西是一个红色的鲱鱼(抱歉,这是一个鱼节目......我无法抗拒。)

的问题是第42行: allsprites.update

它应该阅读 allsprites.update()

下面是一个微妙但很重要的区别: 在Python中,一个方法或函数也可以作为变量读取。这是一个非常强大的功能,但还没有你正在使用的功能。如果括号被忽略,它将被作为变量读取(并且它什么也不做)。如果包含括号,则执行该函数。

你忘了括号(事实上,一些编辑似乎有时删除)等的Python愉快地接受你的代码的法律指导。但是,它只是承认实际上有一种称为allsprites.update的方法。更新方法从来没有被调用,所以精灵永远不会更新,因此它的位置从未改变。

我的版本实际上是调用的精灵群体,这反过来又要求所有会员的精灵的更新方法的更新方法和程序工作得很好。可以肯定的是,我已经在三大操作系统(Ubuntu,Mac和Win 7)上测试过它,并且它工作正常。

如果你有关于代码是否正在您的操作系统的疑惑,请从我的网站下载我原来的测试代码(http://www.aharrisbooks.net),看看是否能的工作。

让我知道你是否被别人卡住了。

顺便说一句,我目前工作的一个游戏编程书HTML5。站在我的网站了解更多信息....

相关问题