王朝网络
分享
 
 
 

Quake源代碼分析(草稿).3

王朝other·作者佚名  2006-05-27
宽屏版  字体: |||超大  

消息處理:

我把Quake的消息分為兩類,一種是常用輸入設備產生的消息,譬如KeyBoard,Mouse,JoyStick等.

另一種就是網絡或本地傳輸數據包時引發的消息.

引擎中Com_EventLoop()函數負責將抓獲到的消息根據事件的類型分發給對應的處理函數,

Com_GetEvent()可以從com_eventQueue和eventqueue數組隊列中獲取到所有的未處理消息,

typedef enum sysEventType_s {

SE_NONE, // evTime is still valid

SE_KEY, // evValue is a key code, evValue2 is the down flag

SE_CHAR, // evValue is an ascii char

SE_MOUSE, // evValue and evValue2 are reletive signed x / y moves

SE_JOYSTICK_AXIS, // evValue is an axis number and evValue2 is the current state (-127 to 127)

SE_CONSOLE, // evPtr is a char*

SE_PACKET // evPtr is a netadr_t followed by data bytes to evPtrLength

} sysEventType_t;

typedef struct {

int evTime;

sysEventType_t evType;

int evValue, evValue2;

int evPtrLength; // bytes of data pointed to by evPtr, for journaling

void *evPtr; // this must be manually freed if not NULL

} sysEvent_t;

static sysEvent_t com_eventQueue[COM_MAX_EVENTS];

static sysEvent_t eventqueue[SYS_MAX_EVENTS];

從以上的聲明部分我們可以看到com_eventQueue和eventqueue其實就是一個sysEvent_t結構的數組.

這裡你可能要會問了,com_eventQueue裡面的數據又是從何而來的呢?當Com_GetEvent()函數發現com_eventQueue裡面沒有數據的時候,例如程序剛啟動時,它會調用Com_GetRealEvent()來蒐集未處理的消息.然後再從eventqueue中讀出事件.

Com_GetRealEvent()àSys_GetEvent()àSys_PumpEvents()

Sys_PumpEvents()使用消息循环體(

while( PeekMessage( &msg, NULL, 0U, 0U, PM_NOREMOVE ) ) {

if( !GetMessage( &msg, NULL, 0, 0 ) ) {

Sys_Quit();

}

TranslateMessage( &msg );

DispatchMessage( &msg );

})

先将消息交由WndProc()处理,然后WndProc()再把诸如按键,鼠標移動等外部设备输入信息通过调用Sys_QueEvent()函数存储到全局队列eventqueue中。

另外Sys_PumpEvents()還會調用Sys_GetPacket(),將從Socket讀到的網絡數據也通過Sys_QueEvent()函数存放到eventqueue中.

com_eventQueue隊列事件其實是通過Com_PushEvent()函數把eventqueue中的事件壓入到com_eventQueue中.Quake採用這種雙隊列的方式來保存消息.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有