SimpleCG对于不同类型的APP可以使用不同的运行框架。当前开发框架分别有简单的动画、一般界面APP,游戏类APP。使用方法如下:
一、简单动画演示
这种是最简单的,一般直接按时间顺序绘制动画每一祯就可以了,基本不涉及交互界面。这种模式的程序在前面已经有许多演示了,基本前面的很多绘制演示都是采用这种方式的框架。最大的特点就是不需要界面交互,按流程顺序绘制就行了。与大家学习C语言时的控制台交互非常相似。下面看看怎么使用这种框架:
首先是包含头文件,动画演示框架包含的头文件是CGBoard.h
#include "../import/include/CGBoard.h"
然后需要链接库文件
#ifdef _DEBUG
#pragma comment(lib,"../import/lib/SimpleCG_MDd.lib")
#else
#pragma comment(lib,"../import/lib/SimpleCG_MD.lib")
#endif
接着定义绘制函数及运行框架代码
void DrawProcess()
{
//此处添加动画绘制代码
}
int _tmain(int argc, _TCHAR* argv[])
{
if( !ShowingBoard(C_IMAGE_WIDTH,C_IMAGE_HEIGHT, DrawProcess))
return 1;
CloseBoard();
return 0;
}
其中DrawProcess名字可以随便取,只要是不含参数及返回值的函数就可以,并把它作为ShowingBoard的第三个参数调用即可,另外两个参数分别是画布长度及宽度。所以整个框架如下所示:
#include "../import/include/CGBoard.h"
#define C_IMAGE_WIDTH 640
#define C_IMAGE_HEIGHT 480
#ifdef _DEBUG
#pragma comment(lib,"../import/lib/SimpleCG_MDd.lib")
#else
#pragma comment(lib,"../import/lib/SimpleCG_MD.lib")
#endif
void DrawProcess()
{
//绘制
}
int _tmain(int argc, _TCHAR* argv[])
{
if( !ShowingBoard(C_IMAGE_WIDTH,C_IMAGE_HEIGHT, DrawProcess))
return 1;
CloseBoard();
return 0;
}
演示例子可以看看前面介绍的汉诺塔动画及中秋贺卡动画。
二、界面APP
第二种比较常见使用是应用界面APP,这种是典型的Windows界面APP。类似以下的界面
这个是一个录屏软件,可以看到这种界面最大的特点就是有一些控件。所以可以接受用户的交互操作,对用户的操作进行一些反馈输出。下面看看这种框架如何使用。
首先包含的头文件不一样,需要包含SimpleCG.h
#include "../../import/include/SimpleCG.h"
然后链接库文件
#ifdef _DEBUG
#pragma comment(lib,"../../import/lib/SimpleCG_MDd.lib")
#else
#pragma comment(lib,"../../import/lib/SimpleCG_MT.lib")
#endif
然后是框架调用代码:
if( !InitApp(C_IMAGE_WIDTH, C_IMAGE_HEIGHT))
return 1;
Redraw();
ReflushWindow();
RunningApp();
ReleaseApp();
下面看看整体代码:
#include "../../import/include/SimpleCG.h"
#ifdef _DEBUG
#pragma comment(lib,"../../import/lib/SimpleCG_MDd.lib")
#else
#pragma comment(lib,"../../import/lib/SimpleCG_MT.lib")
#endif
void Redraw()
{
//根据用户输入进行绘制
}
LRESULT OnRButtonDown( HWND hWnd, WPARAM wParam, int nX, int nY )
{
Redraw();
return TRUE;
}
int _tmain(int argc, _TCHAR* argv[])
{
SetMouseProcess( enumINMSG_LBUTTONDOWN, OnLButtonDown);
if( !InitApp(C_IMAGE_WIDTH, C_IMAGE_HEIGHT))
return 1;
Redraw();
ReflushWindow();
RunningApp();
ReleaseApp();
return 0;
}
可以看到这里添加了设置鼠标点击的操作代码。所以可以根据用户对输入的操作进行反馈输出。在前面我们的一个课程设计的例子程序---学生信息管理系统就是一个使用这种框架的典型例子,同学可以下载源码察看。
三、游戏APP
最后一种是简单游戏框架。这种就是游戏运行框架,一般就是一个游戏循环,然后更新和绘制游戏画面。介绍这种框架就是为了接下来介绍小游戏编写做准备的。链接库文件和头文件与界面APP类似,不同的地方是框架运行模式。游戏框架是按固定频率刷新页面,更新画面内容。整个框架代码如下所示:
#include "../import/include/SimpleCG.h"
#define C_IMAGE_WIDTH 640
#define C_IMAGE_HEIGHT 480
#ifdef _DEBUG
#pragma comment(lib,"../import/lib/SimpleCG_MDd.lib")
#else
#ifdef _W64
#pragma comment(lib,"../import/lib/x64/MTRelease/SimpleCG_MT64.lib")
#else
#pragma comment(lib,"../import/lib/SimpleCG_MT.lib")
#endif
#endif
//绘制游戏
void RenderGame()
{
//绘制界面
}
//更新游戏状态
void UpdateGame( UINT nElapse )
{
static int s_nLastTick = 0;
if( ( nElapse - s_nLastTick )<120 )
return;
s_nLastTick = nElapse;
}
LRESULT OnLButtonDown( HWND hWnd, WPARAM wParam, int nX, int nY )
{
return false;
}
LRESULT OnLButtonUp( HWND hWnd, WPARAM wParam, int nX, int nY )
{
return false;
}
LRESULT OnRButtonDown( HWND hWnd, WPARAM wParam, int nX, int nY )
{
return false;
}
LRESULT OnRButtonUp( HWND hWnd, WPARAM wParam, int nX, int nY )
{
return false;
}
LRESULT OnMouseMove( HWND hWnd, WPARAM wParam, int nX, int nY )
{
return false;
}
//初始化游戏
void InitGame(HWND hWnd)
{
srand(GetTickCount());
//按键处理初始化
GetMouseInput()->onMouseDownLeft = OnLButtonDown;
GetMouseInput()->onMouseDownRight = OnRButtonDown;
GetMouseInput()->onMouseUpLeft = OnLButtonUp;
GetMouseInput()->onMouseUpRight = OnRButtonUp;
GetMouseInput()->onMouseMove = OnMouseMove;
}
int _tmain(int argc, _TCHAR* argv[])
{
SCG_GameLoopInfo info;
info.nFPS = 60;
info.nHeight = C_IMAGE_HEIGHT;
info.nWidth = C_IMAGE_WIDTH;
info.pFunDrawProcess = RenderGame;
info.pFunFrameUpdate = UpdateGame;
info.pFunInitGame = InitGame;
info.pFunInput = NULL;
if( !StartGameLoopEx( &info ))
return 1;
return 0;
}
通过以上代码,将在UpdateGame中不断更新游戏状态,并依据不同状态使用在RenderGame中绘制 相应游戏内容就可以了,大大简化了小游戏开发的过程。后面将通过具体游戏介绍游戏框架的使用。
四、结语
通过以上三个框架的内容介绍,同学们可以依据所设计软件的特点选择适当的框架进行SimpleCG的应用开发。后续将用几个小游戏的例子进一步介绍游戏框架的开发方法,后续将介绍的游戏有扫雷、贪吃蛇、俄罗斯方块、五子棋等,有兴趣的同学可以关注并留意后续文章介绍。