调试示例代码Pygame的?

一个简单的问题:为什么这样做的第一个代码的工作,但在看似相同的第二个代码冻结起来的时候pygame的窗口出现?

# Moving Pan # Demonstrates mouse input from livewires import games games.init(screen_width = 640, screen_height = 480, fps = 50) class Pan(games.Sprite): """ A pan controlled by the mouse. """ def update(self): """ Move to mouse coordinates. """ self.x = games.mouse.x self.y = games.mouse.y def main(): wall_image = games.load_image("wall.jpg", transparent = False) games.screen.background = wall_image pan_image = games.load_image("pan.bmp") the_pan = Pan(image = pan_image, x = games.mouse.x, y = games.mouse.y) games.screen.add(the_pan) games.mouse.is_visible = False games.screen.event_grab = True games.screen.mainloop() # kick it off! main()

出现故障的第二个:

from livewires import games,color games.init (screen_width = 640, screen_height = 480, fps = 50) #Creating a moving object tied to the cursor. This includes one method with two #lines of code. class Pan (games.Sprite): def moved (self): #Receives mouse position self.x = games.mouse.x #Changes mouse position to new x,y values. self.y = games.mouse.y #The Main myscr = games.screen myscr.set_background (games.load_image ("wall.jpg", transparent = False)) pan_image = games.load_image ("pan.bmp") le_pan = Pan (image = pan_image, x = games.mouse.x, y = games.mouse.y) games.mouse.is_visible = False myscr.add (le_pan) myscr.event_grab = True myscr.mainloop()

--------------解决方案-------------

我从来没有与livewires工作,但是在游戏中,你通常需要-或多或少-无尽的游戏循环。

游戏循环背后的意思是说,你总是想知道鼠标还是什么键被按下,而不是只有一次! 所以,你要问Where is the mouse?一遍又一遍。 而实现这一目标,你使用一个循环来检查你想每次它被执行的一切。

在第一个例子中的游戏环的功能是main 。 的应用程序的流程是这样的:

  1. 导入需要的库

    from livewires import games
  2. 初始化游戏画面

    games.init(screen_width = 640, screen_height = 480, fps = 50)

  3. 声明可在屏幕上显示一个精灵

    class Pan(games.Sprite):
    """ A pan controlled by the mouse. """
    def update(self):
    """ Move to mouse coordinates. """
    self.x = games.mouse.x
    self.y = games.mouse.y

  4. 声明的主要方法和设置的游戏画面背景

    def main():
    wall_image = games.load_image("wall.jpg", transparent = False)
    games.screen.background = wall_image

  5. 上述定义的精灵添加至屏幕,并将其移动到鼠标光标的位置

    pan_image = games.load_image("pan.bmp")
    the_pan = Pan(image = pan_image,
    x = games.mouse.x,
    y = games.mouse.y)
    games.screen.add(the_pan)

  6. 使鼠标光标不可见,并激活事件

    games.mouse.is_visible = False
    games.screen.event_grab = True

  7. 运行主循环 。 这种方法的调用说: Run me ( function main ) over and over!

    games.screen.mainloop()

  8. 调用主首次

    main()

在第二个例子中,不存在游戏环。 该应用程序(更严格的包装)的流动是这样的:

  1. 导入库,初始化游戏屏幕,宣告一个精灵

    from livewires import games,color
    games.init (screen_width = 640, screen_height = 480, fps = 50)

    class Pan (games.Sprite):
    def moved (self):
    self.x = games.mouse.x
    self.y = games.mouse.y

  2. 安装游戏屏幕背景,并添加精灵

    myscr = games.screen
    myscr.set_background (games.load_image ("wall.jpg", transparent = False))
    pan_image = games.load_image ("pan.bmp")
    le_pan = Pan (image = pan_image,
    x = games.mouse.x,
    y = games.mouse.y)
    myscr.add(le_pan)

  3. 停用鼠标光标,使事件

    games.mouse.is_visible = False
    myscr.event_grab = True

  4. 运行主循环 。 这种方法的调用说: Run me ( function undefined ) over and over!

    myscr.mainloop()

这里是关键! 您不能调用代码,在Python的文件的根!mainloop功能不知道在哪里返回或从哪里开始。 呼叫被丢失,你的程序冻结。 游戏画面不能得到更新,因为没有告诉它应该如何更新。

结论: 必须有你的游戏循环功能!

分类:蟒蛇 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.501 (s). 10 q(s)