几年前写《嵌入式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. java Web应用配置log4j日志记录

    公司启动全国支票影像系统,有这样一个功能是和消息中间件打交道,需要记录每一个报文出错情况,因为方便后期开发人员的调试,我选用了log4j作为日志记录,好了废话不多说了! 第一步:首先建立一个WEB工程 ...

  2. C++ 去掉字符串首尾的 \x20 \r \n 字符

    转载:http://www.sharejs.com/codes/cpp/5780 /* 去掉字符串首尾的 \x20 \r \n 字符 by sincoder */ void clean_string( ...

  3. 第四课 Activity

    1.Activity生命周期 1.1 创建-->启动-->获取焦点-->running-->失去焦点-->停止-->销毁.(一个正常activity的生命周期) 1 ...

  4. 【leetcode❤python】66. Plus One

    class Solution:      # @param digits, a list of integer digits      # @return a list of integer digi ...

  5. CodeForces 432B Football Kit

     Football Kit Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Subm ...

  6. [51NOD1405] 树的距离之和(树DP)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1405 (1)我们给树规定一个根.假设所有节点编号是0-(n-1 ...

  7. windows下安装zabbix_agents_2.2.0

    下载与解压 下载zabbix_agents_2.2.0 http://www.zabbix.com/downloads/2.2.0/zabbix_agents_2.2.0.win.zip 解压到C盘下 ...

  8. git 简单用

    之前一直用svn,用git也只是从github上clone代码.现在自己试试用git做版本控制.等用熟悉了,再看看怎么搞分支,合并,多人开发之类的. 1下载个git客户端,如Git for Windo ...

  9. 随机步法A-Z

    程序是生成一个10X10的字符数组,初始化时全为 ‘.’  的随机步法.程序必须随机的从一个元素 ‘走到’ 另一个元素,每次只向上.向下.向左或向右移动一个元素位置.已访问过的元素按访问顺序用字母A到 ...

  10. vim功能使用

    转自:http://blog.csdn.net/xiajun07061225/article/details/7039413 vi与vim vi编辑器是所有Unix及Linux系统下标准的编辑器,他就 ...