使用python和pygame进行游戏开发(3)
作者:zzj 日期:2008-08-29
理解事件
在Hello World程序中,我们仅仅处理了QUIT事件,处理QUIT事件是必要的,除非你想有一个关不掉的Pygame窗口!Pygame还会创建如鼠标移动和键盘按下等事件来通知你。不管你的程序当前在做什么,事件随时都会产生。例如,当玩家按下游戏手柄上的开火按键时,你的代码正在往屏幕上画一个坦克这种情况。在你准备处理事件之前,Python将事件存储在一个队列当中。你可以将事件队列想像为一队等待进入一个建筑物的人们,每个人都承载着与一个事件相关的特定信息,。当玩家按下开火按钮时,带有该按钮被按下信息的joystick事件抵达,与此类似,当玩家释放开火按钮时,带有该按钮被释放信息的joystick事件抵达。
在Hello World程序中,我们仅仅处理了QUIT事件,处理QUIT事件是必要的,除非你想有一个关不掉的Pygame窗口!Pygame还会创建如鼠标移动和键盘按下等事件来通知你。不管你的程序当前在做什么,事件随时都会产生。例如,当玩家按下游戏手柄上的开火按键时,你的代码正在往屏幕上画一个坦克这种情况。在你准备处理事件之前,Python将事件存储在一个队列当中。你可以将事件队列想像为一队等待进入一个建筑物的人们,每个人都承载着与一个事件相关的特定信息,。当玩家按下开火按钮时,带有该按钮被按下信息的joystick事件抵达,与此类似,当玩家释放开火按钮时,带有该按钮被释放信息的joystick事件抵达。
Tags: pygame
QQ增值服务充值系统--QQZTC
作者:zzj 日期:2008-05-14
wxPython in Action(173)(全文完)
作者:zzj 日期:2008-03-01
wxPython in Action(172)
作者:zzj 日期:2008-03-01
18.6 创建一个多线程的wxPython应用程序
在大多数的GUI应用程序中,在应用程序的后台中长期执行一个处理过程而不干涉用户与应用程序的其它部分的交互是有好处的。允许后台处理的机制通常是产生一个线程并在该线程中长期执行一个处理过程。对于wxPython的多线程,在这一节我们有两点需要特别说明。
最重要的一点是,GUI的操作必须发生在主线程或应用程序的主循环所处的地方中。在一个单独的线程中执行GUI操作对于无法预知的程序崩溃和调试来说是一个好的办法。基于技术方面的原因,如许多Unix的GUI库不是线程安全性的,以及在微软Windows下UI对象的创建问题,wxPython没有设计它自己的发生在多线程中的事件,所以我们建议你也不要尝试。
在大多数的GUI应用程序中,在应用程序的后台中长期执行一个处理过程而不干涉用户与应用程序的其它部分的交互是有好处的。允许后台处理的机制通常是产生一个线程并在该线程中长期执行一个处理过程。对于wxPython的多线程,在这一节我们有两点需要特别说明。
最重要的一点是,GUI的操作必须发生在主线程或应用程序的主循环所处的地方中。在一个单独的线程中执行GUI操作对于无法预知的程序崩溃和调试来说是一个好的办法。基于技术方面的原因,如许多Unix的GUI库不是线程安全性的,以及在微软Windows下UI对象的创建问题,wxPython没有设计它自己的发生在多线程中的事件,所以我们建议你也不要尝试。
Tags: wxpython
wxPython in Action(171)
作者:zzj 日期:2008-02-29
wxPython in Action(170)
作者:zzj 日期:2008-02-29
wxPython in Action(169)
作者:zzj 日期:2008-02-28
wxPython in Action(168)
作者:zzj 日期:2008-02-28
18.3 拖放到的目标
实现拖放到的目标的步骤基本上借鉴了实现拖放源的步骤。其中最大的区别是,实现拖放源,你可以直接使用类wx.DropSource,而对于目标,你首先必须写你的自定义的wx.DropTarget的子类。一旦你有了你的目标类,你将需要创建它的一个实例,并通过使用wx.Window的SetDropTarget(target)方法将该实例与任一
wx.Window的实例关联起来。设置了目标后,wx.Window的实例(不论它是一个窗口,一个按钮,一个文本域或其它的控件)就变成了一个有效的释放目标。为了在你的释放目标上接受数据,你也必须创建一个所需要类型的wx.DataObject对象,并使用释放目标方法SetDataObject(data)将wx.DataObject对象与释放目标关联起来。在实际释放操作前,你需要预先定义数据对象,以便该释放目标能够正确地处理格式。要从目标获取该数据对象,有一个方法GetDataObject()。下面的样板代码使得释放目标能够接受文本(仅能接受文本)。这是因为数据对象已经被设置为wx.TextDataObject的一个实例。
实现拖放到的目标的步骤基本上借鉴了实现拖放源的步骤。其中最大的区别是,实现拖放源,你可以直接使用类wx.DropSource,而对于目标,你首先必须写你的自定义的wx.DropTarget的子类。一旦你有了你的目标类,你将需要创建它的一个实例,并通过使用wx.Window的SetDropTarget(target)方法将该实例与任一
wx.Window的实例关联起来。设置了目标后,wx.Window的实例(不论它是一个窗口,一个按钮,一个文本域或其它的控件)就变成了一个有效的释放目标。为了在你的释放目标上接受数据,你也必须创建一个所需要类型的wx.DataObject对象,并使用释放目标方法SetDataObject(data)将wx.DataObject对象与释放目标关联起来。在实际释放操作前,你需要预先定义数据对象,以便该释放目标能够正确地处理格式。要从目标获取该数据对象,有一个方法GetDataObject()。下面的样板代码使得释放目标能够接受文本(仅能接受文本)。这是因为数据对象已经被设置为wx.TextDataObject的一个实例。
Tags: wxpython






