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

天行健 君子當(dāng)自強(qiáng)而不息

Getting Online with Multiplayer Gaming(16)

 

The Network Component

To use a client component, you have to derive a class from it and, in that derived
class, override the necessary functions. Those functions are few and are needed
only to convey when a connection to the server is achieved or to receive incoming
game messages.

To use the client network component, begin by deriving your own class from
cNetworkClient:

class cClient : public cNetworkClient
{
private:
    
virtual bool connect_complete(const DPNMSG_CONNECT_COMPLETE* msg);
    
virtual bool receive(const DPNMSG_RECEIVE* msg);
};

To pass messages to the application, the derived application object needs only one
public function to siphon in received messages. Why only one? The client needs to
know when a connection is established to the server, which is the purpose of the
connect_complete function.

By using a global variable (g_connected) that represents the connection status, the
client network component can update the state of the connection as follows:

#define CLIENT_WIDTH        640
#define CLIENT_HEIGHT       480

#define ACTION_MOVE_UP      1
#define ACTION_MOVE_RIGHT   2
#define ACTION_MOVE_DOWN    4
#define ACTION_MOVE_LEFT    8
#define ACTION_ATTACK       16

cApp*               g_app;
cNetworkAdapter*    g_adapter;

bool                g_connected;

const float g_angles[13] = { 0.0f, 
                             0.0f, 1.57f, 0.785f, 3.14f,     
                             0.0f, 2.355f, 0.0f, 4.71f, 
                             5.495f, 0.0f, 0.0f, 3.925f };

/****************************************************************************************************/

bool cClient::connect_complete(const DPNMSG_CONNECT_COMPLETE* msg)
{
    g_connected = (msg->hResultCode == S_OK);
    g_app->set_local_player(msg->dpnidLocal);

    
return true;
}

bool cClient::receive(const DPNMSG_RECEIVE* msg)
{
    g_app->receive(msg);

    
return true;
}


/****************************************************************************************************/


void cApp::set_local_player(DPNID player_id)
{
EnterCriticalSection(&m_update_cs);

m_players[0].player_id = player_id;

LeaveCriticalSection(&m_update_cs);
}


Use the matching cApp::receive function for the cClient::receive function:

bool cApp::receive(const DPNMSG_RECEIVE* msg)
{
    sMsg* msg_ptr = (sMsg*) msg->pReceiveData;

    
switch(msg_ptr->header.type)
    {
    
case MSG_GET_PLAYER_INFO:   // add  a player to list
    case MSG_CREATE_PLAYER:
        create_player(msg_ptr);
        
break;

    
case MSG_DESTROY_PLAYER:    // remove a player from list
        destroy_player(msg_ptr);
        
break;

    
case MSG_STATE_CHANGE:      // change state of player
        change_player_state(msg_ptr);
        
break;
    }

    
return true;
}

Notice that the receive function immediately processes incoming messages appropriately
by calling separate functions for each type of game message.

posted on 2007-12-19 16:21 lovedday 閱讀(135) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(lèi)(178)

3D游戲編程相關(guān)鏈接

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 亚洲精品欧美日韩专区| 国产精品一区二区你懂得 | 久久久国产精品一区二区中文| 久久精品主播| 洋洋av久久久久久久一区| 午夜久久久久久| 亚洲激情视频网站| 亚洲影院免费观看| 亚洲国产视频一区二区| 在线中文字幕日韩| 一色屋精品视频在线看| 日韩视频一区二区三区在线播放免费观看| 国产精品久久激情| 欧美国产日韩一区二区| 国产精品久久久久久久久久免费| 蜜臀av性久久久久蜜臀aⅴ四虎 | 久久午夜精品一区二区| 亚洲一区二区三区国产| 麻豆精品在线视频| 欧美一区二区三区在线| 欧美激情精品久久久久久黑人| 香蕉久久精品日日躁夜夜躁| 牛牛影视久久网| 久久成人资源| 欧美午夜视频在线观看| 欧美国产综合| 国产曰批免费观看久久久| 夜夜嗨一区二区| 亚洲片在线资源| 久久国产精品99久久久久久老狼 | 在线成人亚洲| 亚洲欧美日韩精品久久亚洲区| 亚洲裸体视频| 久久一区视频| 久久亚洲电影| 国产亚洲欧美色| 亚洲在线视频| 亚洲一区中文字幕在线观看| 欧美成人免费在线| 亚洲第一伊人| 在线成人欧美| 久久综合伊人77777麻豆| 亚洲一区二区三区成人在线视频精品| 欧美亚洲一区二区在线| 亚洲精品视频免费在线观看| 欧美在线91| 欧美在线免费一级片| 国产精品多人| 亚洲视频图片小说| 亚洲欧美国内爽妇网| 国产精品yjizz| 一区二区三区欧美日韩| 亚洲一级特黄| 国产精品二区在线| 亚洲欧美国产精品桃花| 欧美在线视频免费观看| 国产无一区二区| 久久国产加勒比精品无码| 巨乳诱惑日韩免费av| 伊人久久婷婷色综合98网| 久久精品亚洲一区| 亚洲一本大道在线| 中文精品视频| 国产精品成人在线| 欧美一区二区三区免费视频| 久久天天狠狠| 91久久精品国产91久久| 欧美人在线观看| 一区二区av| 久久精品成人一区二区三区| 精品成人国产在线观看男人呻吟| 久久深夜福利免费观看| 亚洲承认在线| 亚洲深夜福利视频| 国产性色一区二区| 久久亚洲春色中文字幕| 日韩视频久久| 久久久久99| 亚洲伦理久久| 国产亚洲欧美aaaa| 欧美黄色aaaa| 小黄鸭精品aⅴ导航网站入口| 乱码第一页成人| 一区二区三区高清| 国语自产偷拍精品视频偷| 欧美激情女人20p| 亚洲在线观看免费| 亚洲国产成人精品女人久久久 | 亚洲激情女人| 亚洲欧美一区二区视频| 一区二区三区在线视频免费观看| 欧美日韩国产精品| 欧美一级在线亚洲天堂| 亚洲日本中文字幕区| 久久国产视频网| 日韩亚洲成人av在线| 国产香蕉久久精品综合网| 欧美日韩高清免费| 久久人人爽爽爽人久久久| 亚洲视频欧美在线| 亚洲精品久久久久久久久久久久久 | 欧美区日韩区| 久久riav二区三区| 亚洲影院色无极综合| 亚洲国产一区二区三区在线播| 久久精品一区二区三区中文字幕| 99国产麻豆精品| 亚洲福利视频网站| 国产自产在线视频一区| 国产精品久久网| 欧美日韩一区二区三区四区在线观看 | 久久久久这里只有精品| 亚洲欧美日韩一区| 中文网丁香综合网| 亚洲精品黄色| 亚洲国产精品一区| 欧美黑人多人双交| 麻豆精品一区二区综合av| 久久国产精品免费一区| 欧美专区福利在线| 亚洲欧美在线播放| 午夜精品视频在线| 亚洲综合色婷婷| 欧美在线亚洲在线| 亚洲主播在线观看| 亚洲欧美美女| 亚洲影视综合| 亚洲欧美卡通另类91av| 久久久999成人| 亚洲人成毛片在线播放| 在线观看亚洲精品视频| 影院欧美亚洲| 亚洲福利视频专区| 亚洲人成在线影院| 亚洲每日在线| 一区二区精品国产| 亚洲深夜激情| 亚洲欧美日韩精品一区二区| 午夜精品理论片| 欧美一区二区在线播放| 久久久99爱| 欧美刺激午夜性久久久久久久| 欧美高清免费| 亚洲伦理中文字幕| 亚洲字幕一区二区| 久久精品视频导航| 免费亚洲视频| 欧美日韩亚洲一区二区三区在线| 国产精品s色| 国产深夜精品| 亚洲片区在线| 午夜精品网站| 欧美v国产在线一区二区三区| 亚洲国产精品热久久| 一区二区三区欧美激情| 国产精品一区二区在线观看网站 | 国产日韩专区在线| 在线观看日韩国产| 91久久久久久久久| 亚洲视频免费看| 欧美一级淫片aaaaaaa视频| 久久躁狠狠躁夜夜爽| 91久久夜色精品国产九色| 在线亚洲高清视频| 久久久免费精品| 欧美日韩国产免费观看| 国产视频在线观看一区| 亚洲欧洲在线视频| 久久精品盗摄| 亚洲一区二区不卡免费| 亚洲欧美精品中文字幕在线| 久久综合色8888| 亚洲精品小视频在线观看| 久久都是精品| 欧美午夜激情在线| 亚洲国产精品一区二区尤物区| 亚洲综合日韩中文字幕v在线| 可以看av的网站久久看| 一本不卡影院| 蜜桃久久av一区| 国产一二精品视频| 亚洲欧美日韩直播| 亚洲精品在线视频|