赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 3247 |
最后登录 | 2013-12-4 |
在线时间 | 71 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 71 小时
- 注册时间
- 2013-2-6
- 帖子
- 7
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 fy0 于 2013-5-1 16:47 编辑
前言 - 关于游戏引擎
游戏引擎毫无疑问是个大坑。做个好游戏是吾辈长久以来的夙愿,但是看一看现有的游戏引擎,要么太过高端,见于各种大型游戏,要么画面较为粗糙,受到种种限制。
那么作为游戏的基石,好的游戏引擎能赋予游戏更多的表现手法和更加丰富的表现能力,能让一般的游戏更为出色,让优秀的游戏更加完美。
这个东西就是我关于游戏引擎的一次尝试。
项目名称 :流光(flux)
引擎编程语言:C++
游戏编程语言:lua
环境 :VS2008, windows
当前版本 :0.06
感谢 Angel2D,这个项目给了我很大启发(虽然是个很坑的项目)。
引擎特性
* 任意分辨率
* 可以实现超级玛丽式的横版过关游戏,也可以实现RM风格的RPG
* 使用 lua 脚本来编写整个游戏
* 集成2D物理引擎box2d
* 声音支持
* 加载多种常见图片格式
* 可以使用键盘、鼠标(未实装) 和手柄来操作游戏
* 支持加载ttf/otf字体
* 没有外部依赖
演示
不像上一次那样贴图了,这次是一个RM风格的演示(上次是横版)
可执行程序:http://kuai.xunlei.com/d/K33VAZUQbbB6UQQA0f8
可以解压后研究一下 Resources\Scripts 目录,里面放着未编译的 lua 脚本。
后面的控制台窗口是 lua 脚本的输出窗口。
更新记录
version 0.07-pre3 update 2013.5.1
* 修正了为控件设定旋转角度后,其物理实体与此角度不吻合的问题
+ 受 Box2d 限制,在 PhyContactBegin 和 PhyContactEnd 两个碰撞检测中不能设定物理实体的各种属性,现在这个问题被解决了
+ 实现动画列表,这样使得让某个控件旋转180°然后从位置A移动到位置B再渐隐消失这样的连续动画成为可能。
+ 动画列表现在可以并联执行,比如一边旋转一边移动,但是并联动画的时间不能比本体更长
+ 现在每个动画都有一个回调函数,在动画执行完后执行
+ 实现基本的 sprite 动画
+ 现在设定物体位置和尺寸时,可以使用 OpenGL 世界、格子、像素三种坐标单位
+ 支持函数式编程风格
+ 重写演示程序
version 0.06 update 2013.4.26
* 修正了 RemoveView 之后,该 View 的物理实体还继续存在,形成空气墙的问题
* 现在在 theSound.SetBGM() 时,如果新的BGM序号与正在播放的 BGM 相同,那么就不会从头开始播放
+ 开启深度测试功能
+ 现在控件可以设置 Z 轴位置,更有立体感,你可以在演示程序中看到一张漂浮的好人卡
+ 加入场景管理器,现在可以换地图了!
version 0.05 update 2013.4.24
* 修正了 View 及其所有子类在开启物理模式后,SetPosition失效的问题
* 修正了 RMView 关于 GetPosition、GetSize 的一些问题
+ 将 OnPush 事件移动到 Push 窗体之前
+ 增加 AfterPush 事件,紧接着 Push 窗体之后调用
+ 演示程序增加简单的存档系统
+ 演示程序现在可以通过 ESC 来跳过对话
计划表
√ 实现自定义多边形控件,请以逆时针顺序指定顶点,并只画凸多边形(受限于OpenGL),若进行物理模拟,顶点数不得大于8(受Box2d限制)- 0.07
√ 实现动画列表,这样使得让某个控件旋转180°然后从位置A移动到位置B再渐隐消失这样的连续动画成为可能。 - 0.07
√ 让动画列表可以并联执行,比如一边旋转一边移动 - 0.07
√ 让动画在执行后可以支持一个回调函数(当前仅支持lua) - 0.07
√ 实现基本的 sprite 动画 - 0.07
√ 重写演示程序 - 0.07
加入若干切屏效果以及抖动等特效 - 0.07
修正撞上倾斜物体后松手,出现一个沿着斜面滑动的的速度的问题
修复当镜头范围设定过小时,可能出错的问题
实现任意多边形,不再非要是凸多边形,而且物理顶点数不再受限制
实现自动生成地形
实现矢量多边形
用自己实现的字体辅助渲染模块替换掉现有的 FTGL
基本设计
我简单地解释一下引擎的运作。
引擎的总控是 theWorld,即“世界”,而“世界”持有一个列表,即窗体(Screen)列表。
世界会负责渲染在列表中的窗体,并传递按键等事件给他们。
而单有窗体是不能显示东西的,所以存在着属于某个窗体的控件(View),这就是引擎的三级体系。
World - Screen - View 这么一个结构
当一个新的Screen被添加到 theWorld 的显示列表,会触发 OnPush 事件,移除时会触发 OnPop 事件,这是两个基本事件。
写在最后
目前还处于开发阶段,有问题欢迎反馈。
邮箱 fy0#qq.com
|
评分
-
查看全部评分
|