Project1

标题: 2D游戏引擎 - 流光, 预览版本 0.06 [打印本页]

作者: fy0    时间: 2013-2-19 13:57
标题: 2D游戏引擎 - 流光, 预览版本 0.06
本帖最后由 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

作者: pokemonjs    时间: 2013-3-2 21:48
顶一个O(∩_∩)O哈!
期待楼主快点儿弄好啊O(∩_∩)O哈!
作者: fy0    时间: 2013-4-23 17:46
更新了一下顺便传了一个新的预览版,欢迎围观。
作者: 熊的选民    时间: 2013-4-24 20:07
编辑器应该是很重要的一部分吧
作者: fy0    时间: 2013-4-25 00:18
熊的选民 发表于 2013-4-24 20:07
编辑器应该是很重要的一部分吧


现在对于编辑器还没有绝对的依赖性,找个能高亮 lua 的编辑器就能很轻松的进行开发了。

我想大概以后遇到相应的问题,因为这个项目地图本身不是格子,人物也不守一次只能移动一格的限制,地形边缘的处理方式一定会和RM大大的不同,而表现力可能会更强些。

可能会公布个配套的地形编辑工具什么的吧(如果技术方案比较复杂)。

至于那种 IDE 类型的编辑器,等这边忙完我或许会试试看,也就是自动生成一些lua代码而已。

另外又传了一个新版本,欢迎继续围观。
作者: fy0    时间: 2013-4-27 01:03
再一次的更新,版本号 0.06。
这次加入了场景管理器,可以通过那个灰格子切换场景。
作者: 电子最终龙    时间: 2013-4-28 08:12
{:2_270:}LZ要不要考慮下sql或者excel直接導入數據庫?這樣編輯起來方便很多。
還有加密模塊什麽的
作者: fy0    时间: 2013-4-28 09:27
电子最终龙 发表于 2013-4-28 08:12
LZ要不要考慮下sql或者excel直接導入數據庫?這樣編輯起來方便很多。
還有加密模塊什麽的 ...

加密的话就是用 luac 编译成二进制码,比较简单。

导入数据库指导入什么数据呢?

但是技术上以后会优先考虑支持 SQLite,excel的话看情况,因为 lua 操作 excel 会和 windows 绑定在一起,不利于后续版本的向下兼容。
作者: 电子最终龙    时间: 2013-4-28 13:58
fy0 发表于 2013-4-28 11:27
加密的话就是用 luac 编译成二进制码,比较简单。

导入数据库指导入什么数据呢?

游戏数据库就是像角色属性怪物属性乃至乱七八糟的各种静态地址表.
现在做rm甚至rge游戏最麻烦就是扩展过的数据库编辑很麻烦
unity更坑爹,连数据库都要外挂.

只要能用管理器导入xlsx或者sql,然后转换成引擎本身使用的数据库格式
那就可以扩展兼容性又不需要担心系统环境限制了

作者: 736248591    时间: 2013-11-29 21:22
您好 您的链接已过期,下不了了!
作者: fy0    时间: 2013-11-29 22:33
736248591 发表于 2013-11-29 21:22
您好 您的链接已过期,下不了了!

我传个新版的:
http://kuai.xunlei.com/d/K33VAVUnBqWYUgQA3fd

脚本已经换成了python,另外这版还没测试完,估计还会有各种问题。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1