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

天行健 君子當自強而不息

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) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            久久午夜激情| 国产精品久久久一区二区| 国语自产在线不卡| 久久久亚洲国产美女国产盗摄| 亚洲一区二区三区在线视频| 国产伦精品一区二区三区| 久久精品日韩| 久久免费精品视频| 日韩视频二区| 亚洲摸下面视频| 韩国精品一区二区三区| 欧美国产视频在线| 欧美日韩精品在线观看| 欧美一区二区精品| 久久人人97超碰国产公开结果| 亚洲啪啪91| 亚洲桃色在线一区| 黄色影院成人| 日韩一区二区精品葵司在线| 国产精品中文在线| 欧美国产日韩在线观看| 国产精品久久亚洲7777| 老牛嫩草一区二区三区日本| 欧美喷水视频| 久久久久国产精品一区三寸| 欧美精品综合| 久久―日本道色综合久久| 欧美精品一区二区三区久久久竹菊 | 欧美日韩国产va另类| 午夜精品久久久久久久男人的天堂| 久久xxxx| 中日韩高清电影网| 久久精品日产第一区二区| 国产精品99久久久久久白浆小说| 欧美在线地址| 亚洲欧美不卡| 欧美激情精品久久久久久蜜臀| 久久超碰97中文字幕| 欧美精品一区二区三区一线天视频| 久久久久国产精品人| 欧美视频日韩视频在线观看| 欧美电影资源| 激情五月婷婷综合| 亚洲欧美日韩电影| 亚洲私人影吧| 欧美激情中文字幕在线| 麻豆精品网站| 国产真实久久| 亚洲一区观看| 亚洲永久免费| 欧美日韩精品一区二区三区| 欧美黑人一区二区三区| 黑人操亚洲美女惩罚| 午夜精彩视频在线观看不卡| 亚洲一品av免费观看| 欧美日韩国产精品一区| 亚洲国产aⅴ天堂久久| 伊人影院久久| 久久久久久久网站| 久久免费少妇高潮久久精品99| 国产精品乱看| 亚洲欧美成人一区二区三区| 亚洲综合第一| 国产精品高潮呻吟视频| 亚洲图中文字幕| 午夜精品亚洲一区二区三区嫩草| 欧美私人啪啪vps| 99re热精品| 亚洲主播在线观看| 国产精品人人做人人爽| 亚洲欧美福利一区二区| 欧美一区二区精品久久911| 国产精一区二区三区| 午夜精品久久久久久99热软件 | 国产一区二区三区最好精华液| 亚洲欧美日韩国产成人精品影院| 亚洲欧美国产视频| 国产欧美在线观看| 欧美一区二区三区婷婷月色| 久久国产视频网站| 在线播放视频一区| 欧美a级理论片| 日韩一级大片在线| 亚洲欧美日韩在线一区| 国产亚洲成av人在线观看导航| 久久国产66| 亚洲国产成人久久| 亚洲免费在线视频| 国产在线精品成人一区二区三区 | 欧美在线免费视频| 欧美不卡三区| 中文亚洲视频在线| 国产一区二区欧美日韩| 麻豆成人综合网| 一区二区国产在线观看| 久久精品男女| 亚洲久久视频| 国产情侣一区| 欧美精品在线观看| 先锋资源久久| 亚洲国产日韩欧美综合久久 | 狠狠色丁香婷婷综合| 欧美国产亚洲视频| 亚洲免费一级电影| 亚洲高清免费| 久久精品成人一区二区三区| 亚洲欧洲三级电影| 国产区亚洲区欧美区| 欧美大片在线影院| 性做久久久久久久久| 亚洲精品免费看| 久久久亚洲成人| 亚洲欧美中文日韩在线| 亚洲国内精品在线| 国产日韩欧美综合| 欧美日韩精品一本二本三本| 久久久久久久久蜜桃| 亚洲欧美国产精品va在线观看| 亚洲大胆美女视频| 久久久久五月天| 午夜精品视频在线观看| 9色国产精品| 亚洲国产精品女人久久久| 国产欧美一区二区三区久久 | 久久久久久久综合色一本| 一区二区三区毛片| 亚洲人午夜精品免费| 欧美成人免费视频| 久久深夜福利免费观看| 欧美在线啊v| 亚洲欧美日韩国产综合精品二区| 亚洲九九爱视频| 91久久视频| 亚洲国内精品在线| 伊人婷婷欧美激情| 韩国成人福利片在线播放| 国产日韩欧美二区| 国产欧美不卡| 国产欧美日韩一区二区三区在线观看| 欧美日韩高清在线观看| 欧美韩国在线| 欧美国产精品久久| 欧美好吊妞视频| 欧美jizzhd精品欧美巨大免费| 久久综合九色| 欧美电影打屁股sp| 欧美激情网友自拍| 欧美日韩高清在线观看| 欧美欧美在线| 欧美日韩在线大尺度| 欧美日韩一区二区三区四区五区| 欧美另类videos死尸| 欧美日韩国产在线| 国产精品国产三级国产专播品爱网| 欧美日韩综合视频| 国产精品成人在线| 国产日韩精品一区二区浪潮av| 国产欧美日韩三级| 精品成人a区在线观看| 亚洲国产午夜| 亚洲视频一区在线观看| 欧美一区二区成人| 久久阴道视频| 亚洲国内精品| 亚洲午夜激情网页| 欧美一级理论性理论a| 久久一区二区三区av| 欧美精品在线免费| 国产精品一国产精品k频道56| 激情成人av| 一本色道婷婷久久欧美| 性色av香蕉一区二区| 美女国产一区| 一区二区欧美精品| 久久精品卡一| 欧美日本簧片| 国内精品久久久久影院色| 亚洲日本理论电影| 欧美一区二区视频在线观看2020| 老司机精品福利视频| 亚洲精品看片| 性久久久久久久久| 欧美精品一线| 国产一区二区成人久久免费影院| 亚洲欧洲精品一区二区三区| 亚洲一区二区少妇| 欧美freesex交免费视频| 在线亚洲免费| 欧美高清视频一区二区| 国产精品一级久久久| 亚洲乱码国产乱码精品精可以看| 性欧美精品高清| 亚洲区第一页| 久久综合给合| 国产日韩欧美在线播放| 亚洲一区二区三区高清| 欧美激情一区二区三区| 欧美影院在线| 国产人久久人人人人爽| 亚洲在线观看|