游戏引擎/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章 游戏支持系统 (已看) 第 ...
随机推荐
- 2016年12月7日 星期三 --出埃及记 Exodus 21:2
2016年12月7日 星期三 --出埃及记 Exodus 21:2 "If you buy a Hebrew servant, he is to serve you for six year ...
- Spring-task-timer定时器
· spring定时控制器配置文件实现方式 一. 编写一个正常的业务类 public class SyncDataTaskTimer { private final static Logger ...
- Data
[pdf你真可爱] [题目分析] 上午考试想到用二分答案做,写残了... 设两个数列,a和b,a表示磁头,看作指针,b就是要扫描的那个序列. 假设一个答案mid,就是a中的数字走mid步能否到达b中的 ...
- JAVA的名词释义
JDK : Java Development Toolkit (java 开发工具包). JDK是整个JAVA的核心,包括了java运行环境(Java Runtime Envirnmet),一堆jav ...
- js修改浏览器url
var stateObject = {};var title = "";var newUrl = "/";history.pushState(stateObje ...
- Python3基础 用三个双引号 print输出多行文本
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- C#实现随机抽奖和冒泡排序
随机抽奖程序 string[] s = new string[] { "A", "B", "C", "D", " ...
- CodeForces 478C Table Decorations
Table Decorations Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u ...
- C#中关键字ref修饰类对象或结构体[转]
using System; using System.Collections.Generic; using System.Text; namespace CSharpTest { struct Dog ...
- Linux常见问题的处理方法(长期更新)
一.使用sudo命令时xxx is not in the sudoers file. This incident will be reported. 1.su -,输入root的密码完成身份切换. 2 ...