毕设题目是有限状态机在游戏AI中的应用,其实整个状态机模型并不复杂,核心代码也就python 100行左右的量,做了个蚂蚁和蜘蛛的场景,整个小游戏也就500行代码,考虑到太简单了,所以后面又给自己加了个任务:用图形界面编辑状态。因为之前没接触过GUI,最多就是用过公司的UI编辑器,对于GUI的实现并不了解,所以感觉还是挺有挑战的,因为代码是用python写的,所以选择pyqt为学习的对象。
介绍
pyQT是python语言的GUI的解决方案之一
PyQt包含了大约440个类型、超过6000个的函数和方法。
“QtCore”模块主要包含了一些非GUI的基础功能,包含事件循环与Qt的信号机制。此外,还提供了跨平台的Unicode、线程、内存映射文件、共享内存、正则表达式和用户设置。
“QtGui”模块包含了大多数的GUI类型。包含按钮、文本框、列表等常见控件,还包含了基于MVC设计模式的列表、表格、树型控件。同时还提供了一个能够容纳成千上万个元素的画布控件,其中可以放置各种控件和图形。此外,还可以QtGui还支持界面动画与界面状态机编程。
“QtNetwork”模块可以用于编写非阻塞式的UDP、TCP程序。还包含了DNS、HTTP与FTP的客户端。
“QtOpenGL”模块允许Qt程序使用OpenGL渲染3D图形在,而且不必大量更改代码。
“QtSql”模块支持多种SQL数据库。包括sqlite、ODBC、MySQL、PostgreSQL、Oracle。还提供了一个基于MVC模式的数据模型,与QtGui的的表格控件配合使用。
“QtXml”包含一个XML解释器,同时支持SAX和DOM两种编程方式。
“QtWebkit”与“QtScript”两个子模块支持WebKit与EMCAScript脚本语言
“Phonon”子模块支持高级的多媒体编程。包含音频播放器、视频播放器与声效处理。
“uic”子模块能够将Qt的窗体文件转换为Python代码,能够即时读入窗体文件并且显示出来。它依赖于QtXml模块。“QScintilla”子模块包含一个基于Scintilla的文本编辑器控件,Eric IDE使用它作为代码编辑器。“QtMultimedia”提供了底层的多媒体支持,现在多数开发者改用Phonon模块。“QtSvg”支持SVG 1.2 Tiny的静态标准,用于显示与保存SVG格式的图形。
by https://zh.wikipedia.org/wiki/PyQt
首先安装pyQT,https://riverbankcomputing.com/software/pyqt/download,我选择的python2.7的版本
还好有binary的版本,我是在pc上安装的,以前记得下python的数据库相关库折腾了好久。安装后,直接开始!
可见Pyqt的使用还是很简单的,首先创建一个applicaion的实例,然后创建组件,让组件show,最后application进入循环。想来application里面应该会做窗口初始化等相关操作,本来想看看源码,结果发现似乎并不开源~~~~
然后不可能这样手写界面的,qt designer实现拖拽完成界面的方式。我下载的qt-opensource-windows-x86-msvc2010-5.5.1这个版本,700多M。
界面很友好,左边的组件也很多,保存后输出一个UI文件,用记事本打开,其为xml格式:
还是很清晰的,把其解析为python文件要用到uic这个库,如下:
效果如下:
看了下代码化的输出,如下,可以发现还是很清晰的,至少比我司的代码化清晰多了,setupUi是创建设置各种组件,retranslate设置值
其实一直想学习解析这一块,也就是代码化,奈何每次这种地方都给出“难看”,代码一大堆,注释又很少,取名也很怪异。。。。。
麻蛋,突然不知道怎么下手,比如我想实现拖拽功能,designer只能编辑个列表框,然后触摸点击这些还是得深入了解这个库才行,那样的话还不如直接做在游戏里。在网上找了找答案,知乎轮子哥建议直接做在游戏里,我也怂了,因为自己本来目的就是想学学代码化,所以还是妥协了吧~~~~~