青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

創(chuàng)建游戲內核(3)


本篇是的 創(chuàng)建游戲內核(2)續(xù)篇,并且以 游戲程序流、狀態(tài)處理機、進程管理器、數據包系統的實現中介紹的進程管理器的實現為基礎。

棧上的每個函數在每幀都要被調用,除了這點小的不同之處,PROCESS_MANAGER和STATE_MANAGER非常相似。

以下是該類的定義:

//==========================================================================
// Defines for process manager.
//==========================================================================
class PROCESS_MANAGER
{
private:
    
struct PROCESS
    {
        FUNC_PTR func;
        PROCESS* next;

        PROCESS()
        {
            func = NULL;
            next = NULL;
        }

        ~PROCESS()
        {
            delete next;
            next = NULL;
        }
    };

protected:
    PROCESS* _process_parent;

public:
    PROCESS_MANAGER();
    ~PROCESS_MANAGER();

    
void Push(FUNC_PTR func, void* data_ptr = NULL);
    BOOL Pop(
void* data_ptr = NULL);
    
void Pop_All(void* data_ptr = NULL);
    
void Process(void* data_ptr = NULL);
};

接著是它的實現:
 
//-----------------------------------------------------------------------------
// Constructor.
//-----------------------------------------------------------------------------
PROCESS_MANAGER::PROCESS_MANAGER()
{
    _process_parent = NULL;
}

//-----------------------------------------------------------------------------
// Destructor, pop all functions.
//-----------------------------------------------------------------------------
PROCESS_MANAGER::~PROCESS_MANAGER()
{
    
// pop each process
    while(Pop() == TRUE)
        ;
}

//-----------------------------------------------------------------------------
// Push a function on to the stack
//-----------------------------------------------------------------------------
void PROCESS_MANAGER::Push(FUNC_PTR func, void* data_ptr)
{
    
// don't push a NULL value
    if(func != NULL)
    {
        
// allocate a new process and push it on stack
        PROCESS* process_ptr = new PROCESS();

        process_ptr->func = func;
        process_ptr->next = _process_parent;

        _process_parent = process_ptr;

        
// call process with init purpose
        process_ptr->func(data_ptr, INIT_PURPOSE);
    }
}

//-----------------------------------------------------------------------------
// Pop top process from stack
//-----------------------------------------------------------------------------
BOOL PROCESS_MANAGER::Pop(void* data_ptr)
{
    PROCESS*  process_ptr;

    
// remove the head of stack (if any)
    if((process_ptr = _process_parent) != NULL)
    {
        
// first call with shutdown purpose
        _process_parent->func(data_ptr, SHUTDOWN_PURPOSE);

        _process_parent   = process_ptr->next;
        process_ptr->next = NULL;

        delete process_ptr;
    }

    
// return TRUE if more processes exist, FALSE otherwise
    return (_process_parent != NULL);
}

//-----------------------------------------------------------------------------
// Pop all process.
//-----------------------------------------------------------------------------
void PROCESS_MANAGER::Pop_All(void* data_ptr)
{
    
while(Pop(data_ptr) == TRUE)
        ;
}

//-----------------------------------------------------------------------------
// Process all functions
//-----------------------------------------------------------------------------
void PROCESS_MANAGER::Process(void* data_ptr)
{
    PROCESS* process_ptr = _process_parent;

    
while(process_ptr != NULL)
    {
        process_ptr->func(data_ptr, FRAME_PURPOSE);
        process_ptr = process_ptr->next;
    }
}
 

下面給出測試代碼:

點擊下載源碼和工程

 
/*****************************************************************************
PURPOSE:
    Test for class PROCESS_MANAGER.
*****************************************************************************/


#include "Core_System.h"

#pragma warning(disable : 4996)

class APP : public APPLICATION
{
private:
    PROCESS_MANAGER _process_manager;

    
static void _Function1(void*, long);
    
static void _Function2(void*, long);

public:
    BOOL Init()
    {
        _process_manager.Push(_Function1, 
this);
        _process_manager.Push(_Function2, 
this);

        
return TRUE;
    }

    BOOL Frame()
    {
        _process_manager.Process(
this);
        
        _process_manager.Pop_All(
this);

        
return TRUE;
    }
};

void APP::_Function1(void* data_ptr, long purpose)
{
    APP* app_inst = (APP*) data_ptr;

    
if(app_inst != NULL)
    {
        
if(purpose == INIT_PURPOSE)
            MessageBox(app_inst->Get_Hwnd(), "Process1 - init", "Message", MB_OK);
        
else if(purpose == FRAME_PURPOSE)
            MessageBox(app_inst->Get_Hwnd(), "Process1 - frame", "Message", MB_OK);
        
else if(purpose == SHUTDOWN_PURPOSE)
            MessageBox(app_inst->Get_Hwnd(), "Process1 - shutdown", "Message", MB_OK);
    }
}

void APP::_Function2(void* data_ptr, long purpose)
{   
    APP* app_inst = (APP*) data_ptr;

    
if(app_inst != NULL)
    {
        
if(purpose == INIT_PURPOSE)
            MessageBox(app_inst->Get_Hwnd(), "Process2 - init", "Message", MB_OK);
        
else if(purpose == FRAME_PURPOSE)
            MessageBox(app_inst->Get_Hwnd(), "Process2 - frame", "Message", MB_OK);
        
else if(purpose == SHUTDOWN_PURPOSE)
            MessageBox(app_inst->Get_Hwnd(), "Process2 - shutdown", "Message", MB_OK);
    }    
}

int PASCAL WinMain(HINSTANCE inst, HINSTANCE, LPSTR cmd_line, int cmd_show)
{
    APP app;

    
return app.Run();
}

運行截圖:



 

posted on 2007-08-26 00:29 lovedday 閱讀(458) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费看成人av| 国产精品丝袜白浆摸在线| 久久久久久久一区二区| 欧美一区国产二区| 久久久另类综合| 伊人蜜桃色噜噜激情综合| 亚洲国产乱码最新视频| 亚洲视频在线二区| 欧美一区二区三区精品| 久久综合九色欧美综合狠狠| 亚洲第一精品福利| 亚洲精品中文字幕女同| 久久噜噜噜精品国产亚洲综合| 国产精品久久久久久户外露出| 免费观看日韩| 欧美日韩一区二区国产| 国产精品一区二区男女羞羞无遮挡 | 久久精品欧洲| 亚洲另类一区二区| 久久精品视频va| 国产精品日日摸夜夜添夜夜av | 狠狠色狠狠色综合日日小说| 在线一区视频| 亚洲国产一二三| 久久精品成人欧美大片古装| 国产精品捆绑调教| 宅男噜噜噜66国产日韩在线观看| 亚洲图片在区色| 欧美女同视频| 亚洲国产精品小视频| 久久亚洲高清| 欧美视频一区二区三区四区| 一区二区三区精密机械公司| 午夜欧美不卡精品aaaaa| 国产精品久久久久9999高清| 麻豆精品视频在线| 久久蜜臀精品av| 一色屋精品亚洲香蕉网站| 日韩视频亚洲视频| 欧美日韩国产亚洲一区| 一本大道久久a久久综合婷婷| 欧美国产亚洲另类动漫| 久久亚洲一区| 欧美亚洲视频一区二区| 中文在线不卡视频| 国产精品美女久久久免费| 麻豆成人在线播放| 国产精品激情电影| 最新国产成人在线观看| 欧美乱妇高清无乱码| 麻豆久久婷婷| 国模套图日韩精品一区二区| 久久大香伊蕉在人线观看热2| 亚洲欧美中日韩| 国模套图日韩精品一区二区| 一区二区三区四区五区视频| 国产精品久久一区二区三区| 亚洲国产精品嫩草影院| 在线看片日韩| 亚洲人永久免费| 国产精品久久久久77777| 亚洲三级影院| 夜夜躁日日躁狠狠久久88av| 欧美精品二区| 午夜精品婷婷| 久久精品网址| 久久在线91| 在线成人中文字幕| 美女亚洲精品| 欧美在线亚洲综合一区| 国产精品女主播一区二区三区| 99在线观看免费视频精品观看| 国产视频一区二区在线观看| 久久综合电影| 伊人蜜桃色噜噜激情综合| 久久精品视频一| 欧美二区在线播放| 国产精品入口66mio| 亚洲一区二区精品在线| 亚洲欧洲日本专区| 香蕉视频成人在线观看| 久久精品国产亚洲一区二区| 国产亚洲精品久久飘花| 一区二区三区 在线观看视频| 亚洲午夜电影网| 蜜臀av性久久久久蜜臀aⅴ四虎| 免费观看亚洲视频大全| 亚洲精品美女久久久久| 欧美一区二区私人影院日本| 久久久激情视频| 国产精品毛片a∨一区二区三区|国 | 欧美v国产在线一区二区三区| 国产精品日韩精品| 久久久久久伊人| 亚洲韩国青草视频| 亚洲在线视频免费观看| 欧美成人一区二区在线| 久久亚洲综合色一区二区三区| 亚洲第一区在线观看| 欧美精选在线| 午夜综合激情| 亚洲激情偷拍| 久久精品亚洲| 亚洲精品视频在线| 国产欧美一区二区三区另类精品| 日韩亚洲欧美一区二区三区| 欧美在线高清视频| 日韩午夜黄色| 欧美福利影院| 亚洲精品免费在线播放| 欧美一区二区在线观看| 亚洲日本在线视频观看| 国产欧美丝祙| 欧美区一区二区三区| 欧美一区二区视频免费观看 | 久久久久久久久一区二区| 亚洲靠逼com| 激情五月婷婷综合| 久久免费精品视频| 亚洲一区二区三区精品视频 | 午夜激情一区| 99国产精品久久久| 亚洲第一在线综合网站| 国产精品久久久久久久免费软件| 麻豆精品传媒视频| 久久精品成人欧美大片古装| 亚洲午夜一区二区| 亚洲日本中文字幕| 亚洲国产婷婷香蕉久久久久久99| 久久精品一区二区国产| 午夜欧美大尺度福利影院在线看| 91久久精品国产91久久| 亚洲电影欧美电影有声小说| 国产日韩精品电影| 国产精品一区二区你懂的| 欧美三级在线视频| 欧美日韩一区二区视频在线观看| 美女精品在线观看| 美女露胸一区二区三区| 免费在线日韩av| 玖玖在线精品| 一区二区免费看| 一本色道久久综合亚洲91| 亚洲精品美女在线观看| 日韩视频一区二区三区| 99精品99久久久久久宅男| 日韩亚洲欧美成人| 一区二区三区四区国产精品| 夜夜嗨av一区二区三区| 一区二区三区 在线观看视频| 一区二区国产日产| 亚洲婷婷在线| 亚洲欧美成人一区二区三区| 亚洲成色www久久网站| 欧美一区二区三区喷汁尤物| 午夜日韩福利| 久久精品日韩| 久久综合给合久久狠狠色| 欧美激情第一页xxx| 亚洲电影免费在线| 亚洲精品一级| 亚洲自啪免费| 久久精品国产清自在天天线 | 亚洲理伦在线| 中日韩男男gay无套| 欧美一级日韩一级| 久久一区二区三区四区| 欧美电影免费观看高清完整版| 欧美日韩国产成人高清视频| 国产精品免费一区二区三区在线观看| 国产欧美日韩亚州综合| 一区二区三区在线免费播放| 99伊人成综合| 午夜日韩电影| 亚洲第一精品在线| 亚洲一区视频在线| 久久综合给合久久狠狠狠97色69| 欧美日韩hd| 合欧美一区二区三区| 日韩亚洲视频在线| 久久久久高清| 亚洲精品午夜| 久久久国产一区二区| 欧美精品videossex性护士| 国产亚洲欧洲997久久综合| 亚洲精品一品区二品区三品区| 亚洲欧美一区二区精品久久久| 免费欧美日韩| 亚洲伊人伊色伊影伊综合网| 男人天堂欧美日韩| 国产精品影音先锋| 99精品免费视频| 蜜臀av在线播放一区二区三区| 亚洲天堂激情| 欧美日本在线视频| 黄色欧美成人| 欧美亚洲一区二区在线观看| 亚洲日本视频| 欧美不卡高清| 在线观看中文字幕亚洲|