剑孤寒的小站

人生的价值不是用时间,而是用深度去衡量的!
posts - 75, comments - 290, trackbacks - 0, articles - 0
    上一节介绍了如何用Galaxy2D游戏引擎构建最基础的应用程序,这一节我们来学习如何用Galaxy2D提供的Framework来快速构建一个应用程序。
    Framework头文件处于"engine/inc/ggefw"目录中,打开上一节我们建立的工程,在main.cpp文件中添加以下内容:
#include "ggefw/ggefw.h"
#include 
"ggebase.h"
using namespace gge;

class CGameMain:public ggeApplication
{
public:
    
void OnUpdate(float dt)
    
{
    }


    
void OnRender()
    
{
        
//清屏
        Graph_Clear();

        
//画一个方块
        Graph_RenderQuad(300.0f220.0f340.0f260.0f);
    }

}
;

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    CGameMain GameMain;
    GameMain.Start();

    
return 0;
}


如果编译成功,运行该程序会像上一节一样在屏幕中间显示一个白色的方块。

可以看到使用Framework构建一个应用程序非常简单,只需要从ggeApplication继承一个类,然后实现OnUpdate(float dt)OnRender()函数即可。OnUpdate(float dt)用于刷新游戏逻辑,由于画个方块不需要啥逻辑,所以这里提供一个空函数。OnRender()用于渲染当前状态下的图像,画方块的代码就加在这里,需要注意的是底层已经帮你调了Graph_BeginScene()/Graph_EndScene(),所以这里只需要直接画方块就可以了。

在上一个教程里我们设置了帧率等系统状态,在Framework里提供了一个更简单的方法来设置常用属性,在”engine/cfg”目录下有一个” galaxy2d.ini”文件,打开它可以看到现在提供了如下属性设置:帧率、垂直同步(0/1)、是否开启音效(0/1)、屏幕颜色(16/32)、是否全屏(0/1)、是否使用伪全屏(0/1)。修改fps = 30vsync = 1来限制帧率并开启垂直同步,然后将这个文件复制到galaxy2d.dll同级目录,程序启动时就会自动读取这个配置了。如果要设置其他系统状态就要手动添加一些代码了,比如设置窗口标题栏文字,在CGameMain类里添加下面这个函数,可以看到标题栏文字已经变化了,设置其他系统状态的代码也可以加在这里。

void OnConfig()                    
{
    System_SetState(GGE_TITLE, 
"Galaxy2D Game Engine - 使用Framework");
}

好了,这一节就先到这里,在Framework里还附带一些很有用的帮助类,比如导出C++类到Lua等,相关信息可以查看Galaxy2D引擎文档。

Feedback

# re: Galaxy2D游戏引擎教程2 - 使用Framework  回复  更多评论   

2010-01-13 21:05 by xxx
我按你的方法配置好工程,并把你写的游戏框架代码拷贝到工程下,编译后就报下面这个错误,是ggefw.lib文件有问题吗?还是我哪里没有设置好。

------ 已启动生成: 项目: test22, 配置: Debug Win32 ------
正在链接...
LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
ggefw.lib(ggefwbase.obj) : error LNK2019: 无法解析的外部符号 "public: void __thiscall std::_String_base::_Xran(void)const " (?_Xran@_String_base@std@@QBEXXZ),该符号在函数 "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::erase(unsigned int,unsigned int)" (?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@II@Z) 中被引用
ggefw.lib(ggefwbase.obj) : error LNK2019: 无法解析的外部符号 "public: void __thiscall std::_String_base::_Xlen(void)const " (?_Xlen@_String_base@std@@QBEXXZ),该符号在函数 "protected: bool __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Grow(unsigned int,bool)" (?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAE_NI_N@Z) 中被引用
D:\My Documents\Visual Studio 2005\Projects\test11\Debug\test22.exe : fatal error LNK1120: 2 个无法解析的外部命令
生成日志保存在“file://d:\My Documents\Visual Studio 2005\Projects\test11\test22\Debug\BuildLog.htm”
test22 - 3 个错误,1 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========

# re: Galaxy2D游戏引擎教程2 - 使用Framework  回复  更多评论   

2010-01-14 18:16 by 剑孤寒
不好意思,
是ggefw.lib的问题,
前不久新加的功能疏忽了字符串兼容问题,
导致vs2003与vs2005默认库冲突,
尽量在这两天内修复。

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