几年前写《嵌入式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的设计与实现》呢:

  1. GUI的设计与实现很有意思。以前我花了一些时间去研究OS内核,虚拟机和编译器,真正自己尝试去做一个内核,虚拟机和编译器的时候,却让我倍感挫折,在明白了自己只是个平庸的程序员后,放弃了对它们的研究。相反,GUI的实现不太难也不太简单,即使你是初学者,去实现GUI里的一个控件也不是难事。即使工作多年的高手,要去实现一个完整的GUI,仍然有很大挑战。所以GUI的开发是老少皆宜的活动:)我在这上面花了好几年时间,它给我带来的乐趣很多,总是有把自己经验和想法写出来分享的冲动:)

  2. GUI的设计与实现不但很有意思,学习和研究GUI也有利于更快开发APP。以前要去开发一个APP,我感觉很难,等自己实现过GUI后,发现开发APP非常轻松。我曾经在一个多月时间里开发了20来个APP和小游戏,虽然大部分很垃圾,只有一个获得3W$的奖金,但是那种超快开发效率,让我觉得开发APP实在是爽。所以我建议做APP和游戏的朋友,也不防研究一下GUI和游戏引擎的实现。

  3. 在写作的过程中,对CANTK的代码进行重构,并为CANTK-NATIVE的开发做些准备。开发CANTK的时候正是我刚刚开始学JS的时候,虽然后来多次重构,但是里面还是有些代码很丑陋,希望在写作的过程中改掉这部分丑陋的代码。

  4. 虽然做过几个GUI,我在GUI方面也只是刚刚入门,还有很多东西需要学习。我希望在写《GUI设计与实现》的过程中,和大家一起学习和交流,能更进一层学习。

有朋友可能会问,明明是写《游戏引擎/GUI的设计与实现》,而前面只说了GUI,完全没有提游戏引擎呢。其实CANTK已经不只是一个GUI系统了,它集成了物理引擎,声音处理,骨骼动画和粒子系统,是一个完整的2D游戏引擎。虽然有些代码是第三方开源代码,我也花了一些时间去研究,其中不少东西做得非常棒,我希望能把自己的学习心得写出来。所以才把题目命名为《游戏引擎/GUI的设计与实现》。

游戏引擎/GUI的设计与实现-序的更多相关文章

  1. 游戏引擎/GUI的设计与实现-主题

    GUI的主题与中心思想没有什么关系,纯粹是一种控制GUI外观的配置方案.几乎所有的视觉效果都由主题是控制的,一个设计良好的主题模块,可以通过配置文件模拟不同的系统.主题的设计可繁可简,能满足自己的需要 ...

  2. 游戏引擎/GUI的设计与实现-常见GUI架构

    以X Window为代表的客户/服务器架构. X Window通常是指X服务器及封装了通信协议的客户端库.服务器端主要负责输入事件的分发,窗口层次的管理,以及显示输出的处理,其它功能基本上都是在客户端 ...

  3. Python游戏引擎开发(七):绘制矢量图

    今天来完毕绘制矢量图形. 没有读过前几章的同学,请先阅读前几章: Python游戏引擎开发(一):序 Python游戏引擎开发(二):创建窗体以及重绘界面 Python游戏引擎开发(三):显示图片 P ...

  4. Python游戏引擎开发(五):Sprite精灵类和鼠标事件

    本次来实现Sprite类和鼠标事件. 说起这个Sprite啊,涉及过2D游戏研究领域的看官应该都听说过它. 它中文原意是"精灵",只是在不同人的眼中,它所表示的意义不同. 比方说在 ...

  5. 刺猬大作战(游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4)

    游戏特性[编辑] 游戏引擎用Free Pascal写成,GUI用C++写成,使用SDL和Qt4[2]. 0.9.12开始支持实时动态缩放游戏画面. 个性化[编辑] 刺猬大作战有着高度定制性 游戏模式: ...

  6. 3D游戏引擎设计 实时计算机图形学的应用方法 第2版 pdf 带索引书签目录

    3D游戏引擎设计  实时计算机图形学的应用方法  第2版 目录 第1章 概述1.1 图形硬件和游戏发展史1.2 本书版本与软件发展史1.3 章节导读 第2章 图形系统2.1 基础知识2.1.1 坐标系 ...

  7. 开源战棋 SLG 游戏框架设计思考(一)简介和游戏引擎

    战棋 SLG 游戏 SLG(Simulation Game)游戏是模拟游戏的简称.战棋类的SLG有两种:一种是 War Game 中的兵棋推演分支,常见的游戏有战争艺术3(TOAW3 — The Op ...

  8. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  9. 游戏引擎架构 (Jason Gregory 著)

    第一部分 基础 第1章 导论 (已看) 第2章 专业工具 (已看) 第3章 游戏软件工程基础 (已看) 第4章 游戏所需的三维数学 (已看) 第二部分 低阶引擎系统 第5章 游戏支持系统 (已看) 第 ...

随机推荐

  1. Android HandlerThread 完全解析

    HandlerThread本质上是一个线程类,它继承了Thread: HandlerThread有自己的内部Looper对象,可以进行looper循环: 通过获取HandlerThread的loope ...

  2. Java中的内部类与匿名内部类总结

    内部类 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液.跳动) ...

  3. sql重新排序

    declare @i int select @i = 10 update dbo.T_StartEndCode set @i = @i+1,OrderNumber = @i

  4. 取出一个int的每一位,用算法

    int a=1234: int current: while(a) { current=a%10://4 cout<<current; a=a%10; }

  5. CodeForces 508C Anya and Ghosts

     Anya and Ghosts Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u S ...

  6. 【转载】Visual Studio 2015 for Linux更好地支持Linux下的开发

    原文:Visual Studio 2015 for Linux更好地支持Linux下的开发 英文原文:Targeting Linux Made Easier in Visual Studio 2015 ...

  7. 【转载】图解:二叉搜索树算法(BST)

    原文:图解:二叉搜索树算法(BST) 摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!“岁月极美,在于它必然的流逝”“春花 秋月 夏日 冬雪”— ...

  8. Reading Csv Files with Text_io in Oracle D2k Forms

    Below is the example to read and import comma delimited csv file in oracle forms with D2k_Delimited_ ...

  9. JBOSS批量扫描

    exploit-db提供出了EXP,如下: /* * JBoss JMXInvokerServlet Remote Command Execution * JMXInvoker.java v0.3 - ...

  10. mount命令

    注:硬件设备由linux系统自动识别,但必须成功挂载后才能使用 mount #查询已挂载 mount -a #依据配置文件/etc/fstab的内容自动挂载 挂载命令格式: mount  [-t 文件 ...