剑孤寒的小站

人生的价值不是用时间,而是用深度去衡量的!
posts - 75, comments - 290, trackbacks - 0, articles - 0

这篇教程将介绍如何用Galaxy2D游戏引擎构建一个最基础的应用程序。

 

首先设置编译环境:

1. 新建一个Win32项目,打开Galaxy2D引擎目录,复制engine到当前项目目录下。

2. 在项目属性选项卡中的附加包含目录中加入引擎头文件目录"engine/inc"

3. 附加依赖项中加入"engine/lib/galaxy2d.lib"

4. 复制动态链接库"engine/lib/galaxy2d.dll"至工作目录。

 

接下来在当前工程新建一个main.cpp文件,把下面内容添加进去:

#include "ggebase.h"
using namespace gge;

//帧函数
bool Frame()
{
    
//开始渲染
    if (Graph_BeginScene())
    
{
        
//清屏
        Graph_Clear();

        
//画一个矩形
        Graph_RenderQuad(300.0f220.0f340.0f260.0f);

        
//结束渲染
        Graph_EndScene();
    }


    
return false;
}


WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, 
int)
{
    
//创建游戏引擎
    if (!Engine_Create()) return 0;

    System_SetState(GGE_TITLE, 
"Galaxy2D Game Engine - Hello World");
    
//设置帧函数
    System_SetState(GGE_FRAMEFUNC, Frame);
    
//设置帧率
    System_SetState(GGE_FPS, 30);

    
//系统初始化
    if (System_Initiate()) 
    
{
        
//开始运行帧函数
        System_Start();
    }


    
//关闭引擎,释放资源
    Engine_Release();
    
return 0;
}


如果编译成功运行该程序将会在屏幕中间显示一个白色的方块,现在我们回顾一下前面的代码,看看Galaxy2D游戏引擎是如何运作的。

WinMain()函数中首先调用Engine_Create()函数,这个函数将初始化游戏引擎运行环境以及进行一些基础检测。之后调用System_SetState()函数设置了一些引擎运行状态,这些状态后面会讲到,然后就可以调用System_Initiate()进行引擎初始化。如果引擎初始化成功调用System_Start()函数,至此游戏引擎才真正开始运作。最后,在游戏引擎关闭时必须调用Engine_Release()做一些清理工作。

在引擎初始化之前我们设置了三个状态,首先是“GGE_TITLE”,这个状态设置的是程序标题栏文字;然后是“GGE_FRAMEFUNC”,这个状态设置帧函数,也就是游戏的主循环;最后是“GGE_FPS”,这个状态告诉引擎主循环将以30fps的帧率运行,减小CPU占用率。需要注意的是“GGE_FRAMEFUNC”和“GGE_FPS”是可以在运行时更改的,而“GGE_TITLE”一旦系统初始化完毕就无法更改了,详细信息可以查看引擎文档。

为了在屏幕中间画一个白色的方块,在帧函数Frame()里做了如下工作。首先调用Graph_BeginScene()函数告诉引擎要开始画东西了,如果该函数返回true表示引擎已准备好,接下来调用Graph_Clear()清屏,然后用Graph_RenderQuad()函数画矩形,最后调用Graph_EndScene()告诉引擎东西全都画完了。

Feedback

# re: Galaxy2D游戏引擎教程1 - Hello World  回复  更多评论   

2010-01-02 17:02 by Davy.xu
开源吧,HGE都开源了,你的接口跟HGE也差不多

# re: Galaxy2D游戏引擎教程1 - Hello World  回复  更多评论   

2010-01-02 19:58 by 剑孤寒
你好,
Galaxy2D游戏引擎暂时不会开源,
如果以后有时间重构引擎的话会考虑开源现在的版本。

接口跟HGE差不多是因为接口本来就是抄HGE的:)
早在2004年我就已经接触HGE了,
由于当时HGE还没有开源,
很多扩展功能不容易实现,
而且还不支持中文,
所以写了个HGE中文加强版,
接口是抄HGE的,
而内部实现都是自己写的(后来HGE开源后发现内部代码结构还没有我写的好^_^),
经过几次大的改版最终形成现在的Galaxy2D游戏引擎。

Galaxy2D虽然接口跟HGE相似,但内部实现其实有很大差别,Galaxy2D相对HGE有以下优点:
1.自带音频播放功能,HGE需要通过bass.dll播放音频文件,而bass.dll是要收费滴
2.支持视频播放,可以控制时间轴以实现像《幻想三国志》那样的带对话的过场动画
3.支持高效中文字体渲染,支持字体加边、字体阴影,自动换行,行间距,字间距,保存/回复字体当前状态等功能
4.支持任意尺寸贴图,即使超过显卡最大纹理尺寸也没关系
5.RenderTarget纹理也可以锁定,并且在设备丢失后不会丢失纹理上的内容
6.增强型粒子系统以及粒子编辑器
7.可以很容易的跟MFC等应用程序框架结合制作游戏工具
8.基于Window的GUI系统并带有GUI布局器(以后有时间会增加一些新控件和新的GUI编辑器)
9.支持PixelShader,可以用GPU高效的实现一些特殊效果
10.带有一个游戏应用程序框架,封装了一些常用功能,比如游戏内嵌控制台和程序崩溃自动生成dump文件等
11.提供渲染对象管理框架
12.提供扩展资源管理器
13.提供扩展序列帧动画
14.提供导出类到lua的一些帮助函数,支持多继承

# re: Galaxy2D游戏引擎教程1 - Hello World  回复  更多评论   

2010-01-03 16:09 by Sunshine Alike
支持一下,新近刚开始学习游戏引擎,有时间学习一下博主的引擎 @_@

# re: Galaxy2D游戏引擎教程1 - Hello World  回复  更多评论   

2010-01-03 17:21 by 剑孤寒
呵呵,多谢支持:)

# re: Galaxy2D游戏引擎教程1 - Hello World  回复  更多评论   

2010-01-13 17:04 by xxx
希望能提供更多得引擎教程,谢谢!
看了博主的引擎收益匪浅,能不能再引擎中加入网络通信

# re: Galaxy2D游戏引擎教程1 - Hello World  回复  更多评论   

2010-01-13 20:23 by 剑孤寒
嗯,
教程会陆续放出,
由于现在已经有很多很好的网络库了,
所以Galaxy2D暂时不会考虑加入网络库,
谢谢你的支持:)

# re: Galaxy2D游戏引擎教程1 - Hello World  回复  更多评论   

2010-02-01 15:06 by 小葱
很不错的引擎啊
之前有用过HGE的
现在改用你的啦~
加油加油~

# re: Galaxy2D游戏引擎教程1 - Hello World  回复  更多评论   

2010-02-02 18:26 by 剑孤寒
呵呵,
多谢支持,
在使用中如果遇到什么问题请在相应版本引擎发布帖留言,
我会及时处理的:)

# re: Galaxy2D游戏引擎教程1 - Hello World  回复  更多评论   

2015-03-18 22:32 by 闵聪
这个不见了

# re: Galaxy2D游戏引擎教程1 - Hello World  回复  更多评论   

2015-03-19 09:16 by 剑孤寒
恩,因为放上来的文件总是无故失踪,所以删掉了,请自己建个工程,按说明文档调好配置,再把上面的代码复制进去就可以了

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理