游戏引擎/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的设计与实现》呢:

  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的设计与实现》。

时间: 2024-10-07 12:47:21

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

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

GUI的主题与中心思想没有什么关系,纯粹是一种控制GUI外观的配置方案.几乎所有的视觉效果都由主题是控制的,一个设计良好的主题模块,可以通过配置文件模拟不同的系统.主题的设计可繁可简,能满足自己的需要就可以了.这里以我写得几个GUI,FTK,CANTK和WTK为例,介绍一下主题得设计. 主题的内容 一般来说每种控件都有一种或多种状态,常见的状态有正常状态.鼠标按下状态.鼠标OVER状态.只读状态,选中状态和禁用状态等.比如文本只用正常状态,按钮有正常状态.鼠标按下状态.鼠标OVER状态和禁用状态

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

以X Window为代表的客户/服务器架构. X Window通常是指X服务器及封装了通信协议的客户端库.服务器端主要负责输入事件的分发,窗口层次的管理,以及显示输出的处理,其它功能基本上都是在客户端实现了.我们看到的各种界面元素都是在客户端绘制的,这一部分通常称为ToolKit,应用程序开发者只需要关注ToolKit就行了.以前的ToolKit非常多,经过多年的进化和淘汰,常用的ToolKit主要是GTK+和QT两个了.X Window是非常复杂和晦涩的,以前我花了不少时间去研究用于嵌入式系统

Python游戏引擎开发(一):序

邂逅Python 写了这么久的html5,感觉html5学得差不多了,是时候去接触更多的语言来扩充自己的能力了.我先后看了Swift,Java等语言.首先开发Swift需要一台mac,对于我这个寒士而言,过于奢华了一些:Java吧,又感觉太胖了,不够苗条,身材不好,也看不上.最后遇到了Miss Python,先前也和她打过交道,不过感觉语法怪怪的,总是出现>>>这类符号(当时没有深入接触,不晓得是命令输入提示),实在是太高冷了.幸好遇见了廖雪峰大侠,在他的引荐下,我开始初步了解Pytho

游戏引擎介绍,架构,设计及实现

本文的灵感来自于<Android应用开发揭秘>的游戏引擎的那一章. 关于Game Engine,我能想到的几个问题: 1.游戏引擎是什么? 2.Game Engine是为了解决什么问题? 3.Game Engine的架构是什么? 4.如何设计一款游戏引擎? 5.游戏引擎包含哪些模块? 下面就来探讨几个问题:  1. Game Engine是什么? 游戏产业在全球来看是一个很大的产业,一款游戏大作包含了非常多的元素.游戏涉及到剧情.人物.任务.关卡.地图.画质.美术.音乐.网络等多种元素.开发一

VC++实战《星际传奇》网游课程第一部分网络游戏开发基础篇(游戏引擎设计)

本系列课程基于最新的DirectX11接口进行深入细致的讲解,内容涉及D3D11原理与应用.DirectInput.DirectSound等: 教程中专门针对新兴的D3D11接口展开深入的讲解,详细讲解了D3D11渲染管线.DirectComputer(参看<VC++游戏开发系列之Directcomputer并行计算原理与实践--DX11游戏实战开发>).Tessellation.多线程渲染.Shader动态链接等新内容.新知识.并且基于这些内容的基础,更进一步讲解了光照模型原理及实现.高级的

Python游戏引擎开发(四):TextField文本类

上一章我们主要介绍了显示对象和如何显示图片.本章来讲述显示文本. 以下是本系列教程前几章地址,在阅读本篇正文之前,请务必阅读前几章内容. Python游戏引擎开发(一):序 Python游戏引擎开发(二):创建窗口以及重绘界面 Python游戏引擎开发(三):显示图片 文本类TextField 使用过flash的朋友都知道,这个类其实不光是显示文本用的,还可以用于显示输入框.我这里就只实现一些基础实用的功能,以后有时间了慢慢拓展.和上一章一样,TextField是一个显示对象,继承自Displa

Python游戏引擎开发(六):动画的小小研究

今天我们来研究动画,其实这个动画就是一个Sprite+Bitmap的结合体.不造什么是Sprite和Bitmap?=__=#看来你是半路杀进来的,快去看看前几章吧: Python游戏引擎开发(一):序 Python游戏引擎开发(二):创建窗口以及重绘界面 Python游戏引擎开发(三):显示图片 Python游戏引擎开发(四):TextField文本类 Python游戏引擎开发(五):Sprite精灵类和鼠标事件 动画的原理 一般而言,我们的动画是用的这样一种图片: 播放动画的时候,像播放电影一

Python游戏引擎开发(三):显示图片

在上一章中我们讲了如何创建窗口以及对界面进行重绘.可能有朋友不理解为什么要进行全窗口的重绘呢?我在这里可以大致讲一下原因: 由于我们的游戏是动态的,所以我们每次更改数据后(例如播放动画时切换图片),要让界面显示更改后的结果,一般的想法是:首先进行擦除原先要改的地方,然后再把变更的内容画出来.不过这个看似简单,如果遇到了重叠放置的对象就麻烦了,比如说A在B的下面,我们要更改A,那么把A擦掉后,B也会被擦掉,原因在于我们的画布是2D的,无法控制Z方向的擦除.这样一来,我们除了重画A还要再把B画上去.

Python游戏引擎开发(二):创建窗口以及重绘界面

开发本地应用之前,我们得先有个窗口,用于显示界面.其次我们还得实现重绘机制,使游戏不停地刷新,达到动态化的目的.所以我们的引擎开发的第一个阶段就是创建窗口和重绘界面. 以下是之前的文章: Python游戏引擎开发(一):序 Qt的渲染机制 在上一章<序>中我们讲到本次开发用到了PyQt,也就是Qt的Python版.在开始实现引擎功能之前我们要先了解一下Qt,这里先了解渲染机制. 在Qt中,绘画用到的类叫做QPainter,顾名思义,就是个画家类吧.在这个类中,提供了非常多的方法用于操控这个&q