LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭
sgf-py开发指南(三)Element与IOEvent

Element

        在图形化程序中,控件是进行人机交互的媒介。传统的GUI程序都会提供相应的控件,例如,按钮,文本框,单选框等等。游戏是一种特殊的图形化程序,一般不会使用特定的GUI框架来开发,没有现成的控件。游戏中的控件必须借助图形库由开发者实现。

        在sgf-py中,控件被称为Element,Element类亦是所有控件类的父类,在自定义控件时,必须直接或间接继承Element类。

控件的用法:

        直接在Scene中创建,在Scene的draw()方法中,调用控件的draw(surface)方法,即可在相应的surface上显示控件

游戏中的“控件”:

        或者说是游戏UI,像是游戏标题页面的菜单,设置页面的各种选项,游戏中的对话框已经各种各样的按钮。这些都是与游戏风格相匹配的。

完全没有GUI界面游戏的交互方式:键盘按键(1,开始,2,结束)

秋之回忆的游戏界面,控件是简单的二维风格

超级强的全境封锁UI,已经脱离了对传统控件的理解,科幻的三维风格

        游戏的控件类型,取决于游戏的风格,一般游戏引擎不会像某种GUI框架那样给出一套同样的控件,例如Wframe,Qt,python中的thinker等

        Syclight GameFramework withPython也一样,控件是重新定义的,但必须继承Element类,这样框架才会识别。

Element的内置对象,属性,需要实现的方法:

        area:控件位置的矩形区域
        Events:控件中的事件处理对象类型是 IOEvent

        EventsHadDo:处理过的事件标志
        active:是否是活动的
        zIndex:z-index,渲染时的前后位置0:最底层
        visual:是否可见

        draw(surface): 绘制控件

构造说明:

        的最终成果是一个surface使用blit将这个最终的surface展示到屏幕上就是一个控件了。

IOEvent

        控件不仅仅是一个surface,还必须处理各种事件,例如,鼠标点击事件,键盘按下事件,游戏手柄或其它输入设备的事件得到。但在sgf-py中,不需要考虑怎么处理,因为有了IOEvent这个事件处理类。

如何工作?:

这是我编写的一个控件的例子

        通过在初始化控件时,调用IOEvent的appendEvent方法将事件的处理方法通过lambda表达式传入,即可完成绑定事件。跨控件的事件绑定在Scene中完成。

这个例子里self.focus指的是获取到焦点的控件

        在Scene中的doXXXXEvent函数中直接调用控件的Events.doXXXXX()即可

        IOEvent极大的简化了控件中事件处理机制。对应游戏“控件”而言,外表是不能千篇一律的,但事件的处理每个控件都是一样的。有关IOEvent的API会在后续介绍


  

        


推荐文章
评论(0)
分享到
转载我的主页