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

quake源代码阅读分析(1) Quake3源码分析之一                   ----盲人摸象    不可置否,quake3太大太复杂让人顺藤也摸不到瓜.于是只能通过最原始的方式,架起VC,一步步调试,走走看看.每天读懂一些东西也是一点进步.        1,winMain函数之命令行参数      set sv_pure 0 +set vm_cgame 0 +set vm_game 0 +set vm_u 阅读详情

消息處理:
       我把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採用這種雙隊列的方式來保存消息.

雷神之锤3 VC++完整源码(Quake 3 Arena) 3D 游戏界的大牛人 John Carmack 终于放出了 Q3 的源代码,John Carmack向我们兑现了他公开《Quake 3 Arena》游戏源代码的承诺,这不但另业界震惊,也让VC的FASN们异常兴奋,这套Quake 3 Arena Full Source Code v1.32b的源代码,不仅包含有完整版的游戏源码,另外还有各种编译工具以及Q3Radiant地图编辑器等,内容相当丰富哦。希望对有志于 3D game 的朋友带来更多帮助 代码结构很清晰. 立即下载

相关推荐

quake 3源代码

quake 3源代码,Quake3引擎的源码是完全开源的,但是Quake3这款游戏的资源(声音、图片等)并非免费,所以,如果想要运行这款游戏还是必须要购买发行版CD。实际上可以参考这个基于Quake3引擎的完全开源的仿制游

QUAKE 3源代码评测:架构

当谈到一个巨大的代码库,我更喜欢使用XCode:SpotLight速度,Command-click查找定义和字符串高亮使得该工具比Visual Studio更强大。但是打开Quake III项目表明,代码腐烂并不总是关于代码,还涉及到这些工具:XCode 4.0无法打开Quake III XCode 2.0项目。我希望能节省时间给一些人,但也鼓励别人阅读更多的代码,成为更好的工程师。像机器人的额外的场景,以及与玩家的互动。由于我在下一个合同(翻译可能有误)前一个星期,我决定完成我的“循环ID”。

tailiangliang的专栏 5613

quake3源代码

quake3源代码,想了解quake3吗,那就赶紧下载吧,不用积分,还等什么呢?

Quake源代碼分析(草稿)

 http://blog.csdn.net/breakpointer/archive/2004/09/30/121378.aspxQuake是Id Software公司推出一款風迷全球的FPS遊戲.至今為止已經發展到了第三代,而且作為一個優良的遊戲引擎,它也被大量的運用到其他公司開發的遊戲當中.例如我們所熟知的CS,它就是在Quake2引擎上改良而來的.雖然裡面的代碼實現並不完全相同,但是整體

杨德龙的专栏 2206

quake3源码

quake3源码,内含大量经典算法,代码质量很高,学习一下很有必要

360度全景Quake 源代码

360度全景Quake 源代码。我 修改Quake源代码,使之支持鱼眼模式。

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

        Quake是Id Software公司推出一款風迷全球的FPS遊戲.至今為止已經發展到了第三代,而且作為一個優良的遊戲引擎,它也被大量的運用到其他公司開發的遊戲當中.例如我們所熟知的CS,它就是在Quake2引擎上改良而來的.雖然裡面的代碼實現並不完全相同,但是整體框架還是Quake2的,只要是稍微接觸過Quake引擎的人都很容易看得出來.(它是那麼的經典,以至於一直沿用到今天,個

breakpointer的专栏 3564

quake:Quake的源代码,有史以来最好的游戏之一-one source code

quake:Quake的源代码,有史以来最好的游戏之一

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

Quake網絡部分總結:(1) 網絡部分被分為接收和傳送兩個部分.(2) 傳送部份被分為本地數據包傳輸和異地數據包傳輸兩個部分.(3) 本地封包傳輸由NET_SendLoopbackPacket()負責.(4) 異地封包傳輸由Sys_SendPacket()負責.(5) 數據包傳輸又可以分為單包傳輸和多包傳輸.(6) NET_SendPacket()可以傳送本地或異地不超過一個封包大小的數據包.也

breakpointer的专栏 1956

IGV实战指南:从数据导入到Peak可视化的全流程解析

本文提供了一份IGV实战指南,详细解析了从数据导入到Peak可视化的全流程。内容包括软件安装、参考基因组加载、测序数据处理、信号调整以及如何精准定位和可视化Peak区域,并分享了导出出版级矢量图的高级技巧,帮助用户高效完成基因组数据可视化分析。

weixin_29212867的博客 149

第三篇:AMD 和 Intel

它像“乐高积木”一样,可以通过标准化的接口与其他部分组合,构建复杂系统。理解组件后,你会发现从操作系统到微服务,现代软件本质上都是组件的组合!

u013089100的博客 1031

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

        在上一篇文章里,我談到過Quake的各個邏輯模塊被封裝在不同的DLL中,它們之間的交互利用了引出函數作為接口.這一點有點像COM,不同的是COM需要對DLL進行註冊,因為COM有時要提供給多個應用程序來使用,應用程序通過註冊表裡的GUID定位DLL,然後再載入到程序的進程空間中.但是Quake的DLL就不同了,它不必讓所有的應用程序都知道它的存在,它是專屬於引擎的,離開了引擎它一無

breakpointer的专栏 2223

南京邮电大学电工电子基础B实验六(组合逻辑电路)

南京邮电大学电工电子基础B实验五(组合逻辑电路);电工电子;南京邮电大学;计算机学院;实验报告;电路图;

亦是远方的小地方 1万+
上一篇: Quake源代碼分析(草稿).2
下一篇: Quake源代碼分析(草稿).4
amdk_7
博客等级 码龄22年 12粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值