翻译(Using the cApplication Core Object:(使用cApplication对象))

 

1. The System Core

       Systetem Core 控制游戏应用窗口的初始化和程序流(Program flow),还有进程(Processes)、状态(States)、数据包(data Packaging)。这是开始你新游戏工程的第一个步骤。

      

       1.1 Using the cApplication Core Object:(使用cApplication对象)

           SystemCore中,最有用的的对象就是cApplication,它可以用来创建你的应用程序窗口并可以控制程序流(Program flow).它注册窗口类,创建应用程序窗口,处理消息循环,并可以在需要的时候调用内部类。

              cApplication提供了三个需重载的方法来处理应用程序,分别是:Init,Shutdown,Frame。每一个方法都有一个明确的目的,详细内容将在下一节介绍。当处理窗口消息(Windows Messages)时,你也需要提供一个消息处理函数(Message Handler),同样,将在下一节介绍。

              现在,让我们来看下下面的代码,它包含了cApplication的声明:

      

Class cApplication

{

  Private:

HINSTANCE m_hInst;        // Instance(实例) 句柄

HWND     m_hWnd;       // Window(窗口)句柄

  Protected:

Char       m_Class[MAX_PATH];   // 类名

Char       m_Caption[MAX_PATH]; // 窗口标题

 

WNDCLASSEX    m_wcex; // 窗口类结构体(windows class structure)

DWORD          m_Style; // 窗口风格

DWORD          m_XPos; // 窗口x坐标

DWORD          m_YPos; // 窗口y坐标

DWORD        m_Width // 默认窗口宽

DWORD        m_Height; // 默认窗口高

 

  Public:

cApplication(); // 构造方法

 

HWND         GethWnd(); // 获取窗口句柄(handle

HINSTANCE    GethInst(); // 获取实例(instance)句柄

BOOL          Run();  // 运行

BOOL          Error(BOOL Fatal, char *Text, …); // 打印错误

BOOL          Move(long XPos, long YPos); // 移动窗口

BOOL          Resize(long Width, long Height); // 重设窗口大小

 

BOOL          ShowMouse(BOOL Show = TRUE); // 显示或隐藏鼠标

 

// 默认 消息处理函数

Virtual FAR PASCAL MsgProc(HWND hWnd, UINT uMsg,

     WPARAM wParam, LPARAM lParam) {

    Return DefWindowProc(hWnd, uMsg, wParam, lParam);

}

 

// 常用方法,保存你的游戏代码

Virtual BOOL Init() { return TRUE; }

Virtual BOOL Shutdown() { return TRUE; }

Virtual BOOL Frame() { return TRUE; }

};

需要你去调用的方法是很少的,因为cApplication被设计为自己运行,你只需将你的游戏代码塞进去就行了。

要使用cApplication首先得先创建一个cApplication对象。之后,你可以将你的代码重写如这几个有限的方法中,就是前提到的:Init,Shutdown,Frame;

cApplication::Init方法中,你需放置所有类的初始化代码,比如装载数据,准别处理的状态等等。

对应于Init方法的就是cApplication::Shutdown函数,它将释放先前所有的已分配的资源。Shutdown方法将在最后调用,但Init方法却是第一个调用。

              最后是cApplication::Frame,它将在详细循环中反复调用。你可以猜想,Frame函数处理你游戏的一个单一的框架(frame,它可能包含处理用户输入,检验网络数据、绘图。

 

              你不必去重载消息处理函数(MsgProc,除非你想自己处理窗口消息。要处理窗口消息,你需要重载cApplication::MsgProc,待会我将告诉你怎样做。

 

NOTE:之前提到到每一个方法(Init,Shutdown,Frame)都返回一个BOOL,它将告诉cApplication是否要退出程序。如果其中有一个返回一个FALSE,应用程序的执行将会终结。

 

 

 

 

       至于现在,花点时间用cApplication快速创建个应用程序试试。首先要先确定你已经在头文件文件夹包含了Core_System.h,在工程文件文件夹包含了Core_System.cpp,哈哈:

#include “Core_System.h”

Class cApp : public cApplication

{

  Private:

Char         *m_Name;

 

Public:

  cApp();  // 构造函数

 

  BOOL Init(); // 重载 Init 函数

  BOOL Shutdown(); // 重载 Shutdown 函数

  BOOL Frame(); // 重载 Frame 函数

}

  

       这个例子代码通过注册窗口类、创建窗口、装入消息循环来初始化你的应用程序,于是就不断的循环调用Frame函数。这个例子是创建一个保存我的名字的缓冲区,并在每一个frame(框架)中显示。当你结束了你的应用程序,你将释放名字缓冲区并退出应用程序

cApp::cApp() {

  // 初始化实例数据并赋以默认值

  m_Name = NULL;

 

  // 设置窗口风格、位置、宽高

  m_Style = WS_OVERLAPPEDWINDOW; // 窗口风格

  m_XPos = 100; // 窗口x坐标

  m_YPos = 20; // 窗口y 坐标

m_Width = 400; //

m_Height = 400; //

 

// 分配一个类名和窗口标题

strcpy(m_Class, ClassName);

strcpy(m_Caption, My Name Example);

}

 

BOOL cApp::Init()

{

// 给我的名字分配一个空间

if((m_Name = new char[10]) == NULL)   // 我当时运行的时候这里不行,我修改了下,没

strcpy(m_Name, Jim Adams);    // 有进行判断是否为空,直接是:

else return FALSE;                   //  m_Name = new char[10]

return TRUE;

}

 

BOOL cApp::Shutdown()

{

// 释放名字缓冲区

delete m_Name;

m_Name = NULL; // 设置缓冲区为NULL

}

 

BOOL cApp::Frame()

{

// 等待用户的点击并显示我的名字

// OK CANCEL, CANCEL 将离开程序

if(MessageBox(GethWnd(), m_Name, My name is, /

MB_OKCANCEL) == IDCANCEL)

return FALSE;

return TRUE;

}

 

搞定!下面你要做的就是实例化一个刚才你创建的类并用WinMain运行:

int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, /

LPSTR szCmdLine, int nCmdShow)

{

cApp App;

return App.Run();

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值