游戏引擎/GUI的设计与实现-序
几年前写《嵌入式GUI FTK设计与实现》,没写几篇就停止更新了。当时自己研究过MicroWindows, X Window, DirectFB, GTK+和Android的GUI,又写过嵌入式GUI FTK,以为自己对GUI还算熟悉,但是真正写起来还是有些力不从心。另外硬件的飞速发展,我感觉FTK的实用价值不大了,自己的精力转向了CANTK的开发,所以没有再写下去。
这几年我又实现了两个GUI,一个是CANTK,它是基于HTML5的CANVAS元素实现的,针对移动设备的GUI,它已经开源了。另外一个是WTK,是最近才完成的,它也是基于HTML5的CANVAS元素实现的,主要用于PC软件的开发,目前在GameBuilder/AppBuilder里已经彻底用WTK取代了JQueryUI,这个也将在不久开源。
在实现了几个完整GUI系统后,以前觉得很难的东西一下变得开朗了。比如以前想在FTK里实现一个图文混排的控件和树形控件,感觉复杂度超出我的能力范围了,所以FTK没有这样的控件。而在CANTK里实现一个图文混排的控件只花了两天时间,在WTK实现树形控件只花了一天时间。写程序没有什么技巧,只是熟能生巧罢了,多写多练,新的思路自然就出来了。
说来可能有人不会相信,接下来我还要写一个GUI!它就是CANTK-NATIVE,基于OpenGL用C语言来开发。CANTK+GameBuilder/AppBuilder是开发HTML5应用和游戏的利器,我非常喜欢,只要是有界面的东东,我都会用它们来做,因为它们的开发效率非常高。但是HTML5 APP与原生的APP相比,性能方面还是有一些差距,所以我决定再开发一个比原生GUI更快的GUI CANTK-NATIVE。这样CANTK-NATIVE的运行效率与GameBuilder/AppBuilder的开发效率将是完美的结合。
为什么要写《游戏引擎/GUI的设计与实现》呢:
GUI的设计与实现很有意思。以前我花了一些时间去研究OS内核,虚拟机和编译器,真正自己尝试去做一个内核,虚拟机和编译器的时候,却让我倍感挫折,在明白了自己只是个平庸的程序员后,放弃了对它们的研究。相反,GUI的实现不太难也不太简单,即使你是初学者,去实现GUI里的一个控件也不是难事。即使工作多年的高手,要去实现一个完整的GUI,仍然有很大挑战。所以GUI的开发是老少皆宜的活动:)我在这上面花了好几年时间,它给我带来的乐趣很多,总是有把自己经验和想法写出来分享的冲动:)
GUI的设计与实现不但很有意思,学习和研究GUI也有利于更快开发APP。以前要去开发一个APP,我感觉很难,等自己实现过GUI后,发现开发APP非常轻松。我曾经在一个多月时间里开发了20来个APP和小游戏,虽然大部分很垃圾,只有一个获得3W$的奖金,但是那种超快开发效率,让我觉得开发APP实在是爽。所以我建议做APP和游戏的朋友,也不防研究一下GUI和游戏引擎的实现。
在写作的过程中,对CANTK的代码进行重构,并为CANTK-NATIVE的开发做些准备。开发CANTK的时候正是我刚刚开始学JS的时候,虽然后来多次重构,但是里面还是有些代码很丑陋,希望在写作的过程中改掉这部分丑陋的代码。
虽然做过几个GUI,我在GUI方面也只是刚刚入门,还有很多东西需要学习。我希望在写《GUI设计与实现》的过程中,和大家一起学习和交流,能更进一层学习。
有朋友可能会问,明明是写《游戏引擎/GUI的设计与实现》,而前面只说了GUI,完全没有提游戏引擎呢。其实CANTK已经不只是一个GUI系统了,它集成了物理引擎,声音处理,骨骼动画和粒子系统,是一个完整的2D游戏引擎。虽然有些代码是第三方开源代码,我也花了一些时间去研究,其中不少东西做得非常棒,我希望能把自己的学习心得写出来。所以才把题目命名为《游戏引擎/GUI的设计与实现》。
游戏引擎/GUI的设计与实现-序的更多相关文章
- 游戏引擎/GUI的设计与实现-主题
GUI的主题与中心思想没有什么关系,纯粹是一种控制GUI外观的配置方案.几乎所有的视觉效果都由主题是控制的,一个设计良好的主题模块,可以通过配置文件模拟不同的系统.主题的设计可繁可简,能满足自己的需要 ...
- 游戏引擎/GUI的设计与实现-常见GUI架构
以X Window为代表的客户/服务器架构. X Window通常是指X服务器及封装了通信协议的客户端库.服务器端主要负责输入事件的分发,窗口层次的管理,以及显示输出的处理,其它功能基本上都是在客户端 ...
- Python游戏引擎开发(七):绘制矢量图
今天来完毕绘制矢量图形. 没有读过前几章的同学,请先阅读前几章: Python游戏引擎开发(一):序 Python游戏引擎开发(二):创建窗体以及重绘界面 Python游戏引擎开发(三):显示图片 P ...
- Python游戏引擎开发(五):Sprite精灵类和鼠标事件
本次来实现Sprite类和鼠标事件. 说起这个Sprite啊,涉及过2D游戏研究领域的看官应该都听说过它. 它中文原意是"精灵",只是在不同人的眼中,它所表示的意义不同. 比方说在 ...
- 刺猬大作战(游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4)
游戏特性[编辑] 游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4[2]. 0.9.12开始支持实时动态缩放游戏画面. 个性化[编辑] 刺猬大作战有着高度定制性 游戏模式: ...
- 3D游戏引擎设计 实时计算机图形学的应用方法 第2版 pdf 带索引书签目录
3D游戏引擎设计 实时计算机图形学的应用方法 第2版 目录 第1章 概述1.1 图形硬件和游戏发展史1.2 本书版本与软件发展史1.3 章节导读 第2章 图形系统2.1 基础知识2.1.1 坐标系 ...
- 开源战棋 SLG 游戏框架设计思考(一)简介和游戏引擎
战棋 SLG 游戏 SLG(Simulation Game)游戏是模拟游戏的简称.战棋类的SLG有两种:一种是 War Game 中的兵棋推演分支,常见的游戏有战争艺术3(TOAW3 — The Op ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- 游戏引擎架构 (Jason Gregory 著)
第一部分 基础 第1章 导论 (已看) 第2章 专业工具 (已看) 第3章 游戏软件工程基础 (已看) 第4章 游戏所需的三维数学 (已看) 第二部分 低阶引擎系统 第5章 游戏支持系统 (已看) 第 ...
随机推荐
- linux硬盘分区格式化及挂载
1.硬盘的接口类型 硬盘的接口一般分为两种,一种是IDE并行接口,一种是SATA串行接口, 在linux上面IDE接口的硬盘被识别为/dev/hd[a-z]这样的设备,其中hdc表示光驱设备,这是因为 ...
- mysqldump命令
mysqldump命令 mysqldump命令是mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中. 语法 mysqldump(选项) 选项 -- ...
- Find Current Job Openings For Oracle Forms & Reports
Oracle Form & Reports developer jobs are always in demand, candidates who have Oracle D2k, Oracl ...
- android——学习:网格布局——GridLayout
Android一开始就提供了几种布局控件,如线性布局LinearLayout.相对布局RelativeLayout和表格布局TableLayout等,但在很多情况下,这些布局控件是不能满足要求的,因此 ...
- CSS笔记(二)CSS属性选择器
对带有指定属性的HTML元素设置样式. 参考: http://www.w3school.com.cn/css/css_syntax_attribute_selector.asp 选择器 描述 [att ...
- js文件的装载和执行
1.浏览器对script引用的js文件分两步,下载,下载完毕后马上执行:这两步都会阻塞浏览器继续解析. 2.加入defer属性,<script defer type="text/jav ...
- FLASH CC 2015 CANVAS 实际应用过程中遇到的【粉色】问题(不定期更新)
1,导入音乐导致发布卡死 一开始以为是不支持,FQ搜索了一些帖子,也有说不能再时间轴加音乐,需要用代码加入,想想不太可能啊,如果真的不能为什么IDE不禁用呢? 而实际问题是: 我使用的其中一条音效有问 ...
- DOM 操作XML(CRUD)
<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架> ...
- 妙用||和&&
&&和||在JQuery源代码内尤为使用广泛,由于本人没有系统的学习js,所以只能粗略的自我理解出来,希望大家指点下.粗略理解如下: a() && b() :如果执行a ...
- [转]-如何将Eclipse中的项目迁移到Android Studio 中
英文地址:http://developer.android.com/sdk/installing/migrate.html 翻译:Android Studio 中文组(大锤译) 如果你之前有用Ecli ...