锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久国产成人精品麻豆,国产麻豆精品久久一二三,一本大道久久a久久精品综合http://www.shnenglu.com/zgpxgame/category/19142.html鍍忎綔璇椾竴鏍峰啓紼嬪簭錛屽儚寮圭惔涓鏍鋒暡浠g爜錛屽儚鐪嬪皬璇翠竴鏍瘋寮婧?/description>zh-cnSat, 19 Jan 2013 13:31:32 GMTSat, 19 Jan 2013 13:31:32 GMT60Doom3婧愮爜鍓栨瀽璧勬枡鏁寸悊http://www.shnenglu.com/zgpxgame/archive/2012/07/07/182002.htmlzgpxgamezgpxgameFri, 06 Jul 2012 19:25:00 GMThttp://www.shnenglu.com/zgpxgame/archive/2012/07/07/182002.htmlhttp://www.shnenglu.com/zgpxgame/comments/182002.htmlhttp://www.shnenglu.com/zgpxgame/archive/2012/07/07/182002.html#Feedback0http://www.shnenglu.com/zgpxgame/comments/commentRss/182002.htmlhttp://www.shnenglu.com/zgpxgame/services/trackbacks/182002.htmlDOOM3_SOURCE_CODE_REVIEW.doc

zgpxgame 2012-07-07 03:25 鍙戣〃璇勮
]]>
Doom3婧愮爜鍓栨瀽錛?錛?-鏋舵瀯綆浠嬶紙璇戯級http://www.shnenglu.com/zgpxgame/archive/2012/04/25/172673.htmlzgpxgamezgpxgameTue, 24 Apr 2012 16:07:00 GMThttp://www.shnenglu.com/zgpxgame/archive/2012/04/25/172673.htmlhttp://www.shnenglu.com/zgpxgame/comments/172673.htmlhttp://www.shnenglu.com/zgpxgame/archive/2012/04/25/172673.html#Feedback1http://www.shnenglu.com/zgpxgame/comments/commentRss/172673.htmlhttp://www.shnenglu.com/zgpxgame/services/trackbacks/172673.html    鍓嶆鏃墮棿鐪嬪埌鍥藉涓鍗氬涓婄殑鍑犵瘒Doom3浠g爜鍒嗘瀽鐨勬枃绔狅紝鎰熻鍒嗘瀽寰椾笉閿欙紝灝辮嚜宸辯炕璇戜簡涓涓嬶紝浠ヤ笅鏄瘧鏂囷紝鏈変笉澶悊瑙e湴鏂瑰氨鐩存帴璐翠簡鍘熸枃銆傚ぇ閮ㄥ垎鏄寜鑷繁鐨勭悊瑙g炕璇戠殑錛屽彲鑳芥湁浜涘湴鏂硅瘧鐨勫茍涓嶇簿紜傛湁鍠滄鐨勬湅鍙嬪彲浠ュ湪榪欓噷鐪嬪師鏂囷細http://fabiensanglard.net/doom3/錛岃繖閲屾榪庡悇縐嶈璁恒?/p>

 

綆浠?/strong>

    2011騫?1鏈?3鏃ワ紝id Software渚濈収鎯緥鍙戝竷浜嗗墠涓浠e紩鎿庣殑婧愮爜錛岃繖嬈″彂甯冪殑鏄疍oom3寮曟搸錛?a >id Tech 4銆?

    Within hours the GitHub repository was forked more than 400 times錛屽ぇ瀹跺湪涓嶅悓鐨勫鉤鍙頒笂緙栬瘧騫朵笖鏌ョ湅娓告垙鐨勫唴閮ㄥ疄鐜版満鍒躲傛垜涔熼┈涓婂紑濮嬩簡Mac鐗堟湰浠g爜鐨勫涔犮?

    榪欎喚浠g爜鍦ㄦ竻鏅板害鍜屾敞閲婃柟闈紝鏄戶id Software鍙戝竷Doom iPhone浠g爜鍚庯紝鏈濂界殑涓浠戒唬鐮併傛垜寤鴻姣忎竴涓埍濂借呴兘鍘昏涓璇伙紝騫剁爺涔犺繖浠戒唬鐮佺殑瀹炵幇銆?

    榪欓噷鏄垜鐨勭瑪璁幫紝閲岄潰璁板綍浜嗘垜鐞嗚В鍒扮殑涓浜涘唴瀹廣傚儚寰甯鎬竴鏍鳳紝鎴戝皢鍏舵暣鐞嗗湴娓呮櫚浜嗕竴浜涳紝鎴戝笇鏈涘畠鑳藉府鍔╀竴浜涙湅鍙嬭妭鐪佷竴浜涙椂闂達紝騫朵笖鎴戜篃甯屾湜瀹冭兘淇冧嬌鎴戜滑闃呰鏇村鐨勪唬鐮侊紝騫舵垚涓烘洿浼樼鐨勭▼搴忓憳銆?

 

鑳屾櫙

    鎷垮埌榪欎喚鍏鋒湁寮鍒涙х殑寮曟搸浠g爜鏄竴浠跺緢浠や漢鍏村鐨勪簨鎯呫傛棭鍦?004騫碊oom3鍙戣鏃訛紝瀹冪‘绔嬩簡瀹炴椂3D鍥懼艦鍜岄煶棰戠殑鏂版爣鍑嗐傚畠棣栨浣挎妧鏈笂鍏佽緹庢湳鍒涗綔浜哄憳鍍忓ソ鑾卞潪妯″紡閭f牱鍘昏〃杈捐嚜宸辯殑鎯蟲硶銆傚敖綆?騫磋繃鍘諱簡錛岄嬈″湪Delta Labs 4閬囪HellKnight鐨勬儏鏅粛鐒跺緢闇囨捈:

    瑙嗛鍦?a target="_blank">榪欓噷

    鐢卞崱椹厠鍒涢犵殑“緇熶竴鐨勭収鏄庡拰闃村獎”姒傚康鍦ㄨ繖涓棰戦噷琛ㄧ幇寰楀緢鏈夋椿鍔涳紝鎴戝皢鍦ㄥ悗闈㈢殑娓叉煋閮ㄥ垎鍐嶄粙緇嶈繖閮ㄥ垎鍐呭銆?

 

鍒濇鐨勬帴瑙?/strong>

    Doom3婧愪唬鐮佸彂甯冪幇鍦ㄥ紑濮嬬敤github錛岃屼笉鍐嶆槸浠ュ墠鐨刦tp server銆?

    浠嶵Timo鍙戝竷鐨勫師濮嬩唬鐮佸緢瀹規槗鍦╒isual Studio 2010涓婄紪璇戙備笉騫哥殑鏄紝涓嶈兘鐢╒isual Studio 2010 Express鐗堢紪璇戯紝鍥犱負Doom3浠g爜涓嬌鐢ㄤ簡MFC錛岃孍xpress鐗堟病鏈夈?

    windows浠g爜鍦ㄨ繖閲岋細git clone https://github.com/TTimo/doom3.gpl.git

          

 

    鎴戝枩嬈㈠湪Mac緋葷粺涓嬬敤XCode嫻忚浠g爜銆傜浉姣斾簬Visual Studio錛屽畠鍦ㄦ悳绱㈤熷害鍜屽彉閲忕殑楂樹寒鏂歸潰閮界粰鎴戝緢浜彈鐨勪綋楠屻傛垜鎯崇敤XCode鏉ョ紪璇戠▼搴忥紝浣嗘槸欏圭洰璁劇疆鏈変竴浜涢棶棰樸備笉榪囧緢瀹規槗閫氳繃鍑犱釜綆鍗曠殑姝ラ淇濂姐傝繖閲屾湁涓涓猤ithub宸插寘鍚簡鎵鏈夌殑淇敼銆?

    git clone https://github.com/badsector/Doom3-for-MacOSX-

          

榪欎袱浠戒唬鐮侀兘寰堝鏄撶紪璇戯紝鍙互涓閿畬鎴愩?

  • 涓嬭澆浠g爜
  • 鐐笷8鎴朇ommand+B 錛堣瘧娉細澶ф鏄痻code鏋勫緩蹇嵎閿級
  • 瀹屾垚

    鏉傝錛氫負浜嗚繍琛屾父鎴忥紝base鏂囦歡澶逛笅闇瑕佸寘鍚獶oom3 鐨勮祫婧愩傜敱浜庢垜鐨勬満鍣ㄤ笂娌℃湁cd椹卞姩鍣紝鎵浠ユ垜涓嬭澆浜哠team鐗堟湰銆備技涔巌d Software涔熷仛浜嗗悓鏍風殑浜嬶紝鍦╒isual Studio鐨勯」鐩緗噷浠嶇劧鍖呭惈浜嗚繖鏍風殑瀛楃"+set fs_basepath C:\Program Files (x86)\Steam\steamapps\common\doom 3" !

    鏋舵瀯

        瑙e喅鏂規錛坰olution錛変腑欏圭洰鐨勫垝鍒嗗弽鏄犱簡鏁翠釜寮曟搸鐨勬灦鏋?


     

        涓嬮潰浠ユ洿鍙鍖栫殑鏂瑰紡鏉ユ鎷繖涓灦鏋?

    doom3_diagram2

        Doom3鐨勫ぇ閮ㄥ垎浠g爜鍦?004騫?0鏈堢殑鏃跺欏彲浠ラ氳繃鍙戝竷鐨?a >Doom3 SDK涓湅鍒幫紝浣嗘槸SDK閲屾病鏈塂oom3鎵ц鏂囦歡閮ㄥ垎浠g爜銆傚湪SDK涓彲浠ユ瀯寤篿dLib閮ㄥ垎鍜実amex86閮ㄥ垎錛屾牳蹇冨紩鎿庨儴鍒嗛偅鏃朵粛鐒舵槸闂簮鐨勩?

    娉ㄦ剰錛氬湪娓告垙妯″潡(gamex86)錛屾瘡涓涓被閮芥槸浠巌dClass緇ф壙鐨勶紝榪欐牱寮曟搸鍙互鎵ц鍐呴儴RTTI錛屽茍涓斾篃鍙互閫氳繃綾誨悕瀛楁潵瀹炰緥鍖栫被銆?

    鏉傝錛氫綘浠旂粏瑙傚療涓婇潰鐨勬灦鏋勫浘錛屽彲鑳戒細鍙戠幇鏈変竴浜涘熀鏈鏋訛紙渚嬪FileSystem錛夊彧鍦―oom3.exe涓傝繖閲屽氨浼氭湁涓涓棶棰橈紝灝辨槸褰揼amex86涔熻鍔犺澆璧勬簮鐨勬椂鍊欍?

    闂細閭d箞gamex86鏄浣曞鐞嗙殑鍛紵

    絳旓細榪欎簺瀛愮郴緇熸槸浠嶥oom3.exe涓姩鎬佸姞杞藉埌gamex86.dll涓殑錛岃繖涔熸槸鎸囩ず綆ご鍑虹幇鐨勫師鍥犮?

     

        濡傛灉鎴戜滑浣跨敤PE explorer絳夊伐鍏鋒煡鐪媑amex86.dll錛屾垜浠細鐪嬪埌gamex86.dll瀵煎嚭浜嗕竴涓嚱鏁幫細GetGameAPI:  

    榪欐槸鍚孮uake2鍔犺澆renderer鍜実ame 鍔ㄦ佸簱鏂瑰紡涓妯′竴鏍鳳細褰揇oom3鍚姩gamex86.dll鐨勬椂鍊欙紝浼氫氦鎹㈠璞$殑鎸囬拡

    • 閫氳繃LoadLibrary灝哾ll鍔犺澆鍒拌繘紼嬬殑鍐呭瓨絀洪棿涓?
    • 閫氳繃GetProcAddress鑾峰彇GetGameAPI鍦╣amex86.dll涓殑鍦板潃
    • 璋冪敤GetGameAPI

    gameExport_t * GetGameAPI_t( gameImport_t *import );

        鍦ㄦ渶鍚庡畬鎴?#8220;鎻℃墜”鏃訛紝Doom3.exe鏈変竴涓寚閽堟寚鍚慽dGame瀵硅薄錛実amex86.dll鏈変竴涓寚閽堟寚鍚慻ameImport_t瀵硅薄錛岃繖涓璞″寘鍚簡gamex86.dll涓病鏈夌殑瀛愮郴緇燂紝姣斿idFileSystem銆?

    typedef struct {

        int                                version;                  // API version

        idSys *                            sys;                      // non-portable system services

        idCommon *                         common;                   // common

        idCmdSystem *                      cmdSystem;                // console command system

        idCVarSystem *                     cvarSystem;               // console variable system

        idFileSystem *                     fileSystem;               // file system

        idNetworkSystem *                  networkSystem;            // network system

        idRenderSystem *                   renderSystem;             // render system

        idSoundSystem *                    soundSystem;              // sound system

        idRenderModelManager *             renderModelManager;       // render model manager

        idUserInterfaceManager *           uiManager;                // user interface manager

        idDeclManager *                    declManager;              // declaration manager

        idAASFileManager *                 AASFileManager;           // AAS file manager

        idCollisionModelManager *          collisionModelManager;    // collision model manager

    } gameImport_t;

     

    typedef struct {

        int            version;     // API version

        idGame *       game;        // interface to run the game

        idGameEdit *   gameEdit;    // interface for in-game editing

    } gameExport_t;

     

    娉ㄦ剰錛氫竴涓ソ娑堟伅鏄紝id tech4鐨勫紑鍙戣呭湪Doom3 SDK 鏂囨。欏靛緢濂界殑鎻忚堪浜嗗悇涓瓙緋葷粺銆?

     

    C… ++ ?!

    • 鍦╥d Software鍘嗗彶涓婅繖鏄涓嬈$敤C++浠g爜浠f浛浜咰銆傚叧浜庢浜嬫垜闂簡鍗¢┈鍏嬶細

    "

    Hello John,

    I wonder what motivated to move the team to C++ for idtech4.

    Fab

    "

    "

    There was a sense of inevitability to it at that point, but only about half the programmers really had C++ background in the beginning. I had C and Objective-C background, and I sort of "slid into C++" by just looking at the code that the C++ guys were writing. In hindsight, I wish I had budgeted the time to thoroughly research and explore the language before just starting to use it.

    You may still be able to tell that the renderer code was largely developed in C, then sort of skinned into C++.

    Today, I do firmly believe that C++ is the right language for large, multi-developer projects with critical performance requirements, and Tech 5 is a lot better off for the Doom 3 experience.

    John Carmack

    "

    浠栦篃鍦?004騫寸殑鏃跺欐湁璇勮錛?/p>

    "
    Is C++ a better language for developing games than C? Today, most games are developed in C++, and I know that Doom 3 was developed in C++. Having worked with both C and C++ for quite a while, do you think C++ is really a better language for developing games?

    "

    "

    Yes, it is. I'm not a fan of the more complex features of C++, but grouping things into classes is a Good Thing.

    John Carmack

    "

    • 浠g爜涓嬌鐢ㄤ簡澶ч噺鎶借薄鍜屽鎬併備絾鏄竴涓紓浜殑鎶宸у彲浠ラ伩鍏嶆煇浜涘璞″洜铏氬嚱鏁拌〃鑰屽甫鏉ョ殑鎬ц兘闂銆?
    • 鎵鏈夌殑璧勬簮閮戒嬌鐢ㄥ彲璇繪у緢濂界殑鏂囨湰鏂瑰紡瀛樺偍銆傛病鏈夊お澶氱殑浜岃繘鍒跺唴瀹廣備唬鐮佷腑騫挎硾鍦頒嬌鐢ㄤ簡Lexer/Parser鐨勭粍鍚堛?
    • 妯℃澘琚敤鍦ㄤ綆灞傚疄鐢ㄧ被涓紙idLib錛夛紝浣嗘槸浠庝笉浼氬湪楂樺眰浠g爜涓嚭鐜幫紝涓嶄細鍍廏oogle鐨刅8浠g爜閭f牱鍒虹瀻浣犵殑鐪箋?
    • 鍦ㄤ唬鐮佹敞閲婃柟闈紝瀹冩槸id Software鐨勪唬鐮佷腑絎簩濂界殑錛屾渶濂界殑鏄疍oom iPhone浠g爜錛屽彲鑳藉洜涓哄畠姣擠oom3鏄洿榪戠殑涓孌墊椂闂寸紪鍐欑殑銆?
    • 鐪嬩竴涓嬬紪鐮佺害瀹氫篃鏄緢鏈夎叮鐨勪簨鎯咃紝鍦?a href="ftp://ftp.idsoftware.com/idstuff/doom3/source/CodeStyleConventions.doc">榪欓噷銆?

     

    涓誨驚鐜瑙?/strong>

        榪欓噷鏄富寰幆灞曞紑鍚庣殑浠g爜錛氾紙鏇磋緇嗙殑鍦?a >榪欓噷錛?/p>

    idCommonLocal    commonLocal;                   // OS Specialized object

    idCommon *       common = &commonLocal;         // Interface pointer (since Init is OS dependent it is an abstract method

    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )

    {

        Sys_SetPhysicalWorkMemory( 192 << 20, 1024 << 20 );   //Min = 201,326,592 Max = 1,073,741,824

        Sys_GetCurrentMemoryStatus( exeLaunchMemoryStats );

        Sys_CreateConsole();

        SetErrorMode( SEM_FAILCRITICALERRORS );

        for ( int i = 0; i < MAX_CRITICAL_SECTIONS; i++ ) {

            InitializeCriticalSection( &win32.criticalSections[i] );

        }

        Sys_Milliseconds();

        common->Init( 0, NULL, lpCmdLine );               // Assess how much VRAM is available (not done via OpenGL but OS call)

        Sys_StartAsyncThread() // 寮鍚紓姝ョ嚎紼?

        {                      // 寮傛綰跨▼灞曞紑錛堣瘧娉細寮傛綰跨▼涓茍娌℃湁鎵懼埌綾諱技鐨勪唬鐮侊級

            while ( 1 )

            {

                usleep( 16666 );                         // Run at 60Hz

                common->Async();                         // Do the job

                Sys_TriggerEvent( TRIGGER_EVENT_ONE );   // Unlock other thread waiting for inputs

                pthread_testcancel();                    // Check if we have been cancelled by the main thread (on shutdown).

            }

        }

     

        Sys_ShowConsole

        while ( 1 )

        {

            Win_Frame();

            common->Frame();

        }

    }

     

        榪欐槸id Software寮曟搸鐨勬爣鍑嗕富寰幆錛岄櫎浜哠ys_StartAsyncThread鍑芥暟琛ㄦ槑Doom3鏄綰跨▼鐨勶紝榪欎釜綰跨▼鐨勭洰鐨勬槸涓轟簡澶勭悊鏃墮棿鏁忔劅鐨勫姛鑳斤紝寮曟搸涓嶅笇鏈涜繖閮ㄥ垎琚撫鐜囬檺鍒朵綇銆?

    • 澹伴煶澶勭悊
    • 鐢ㄦ埛杈撳叆澶勭悊

    鏉傝錛歩d Tech4鐨勯珮灞傚璞¢兘鏄娊璞$被錛岃繖灝嗕細浣跨▼搴忓湪榪愯鏃朵粠铏氬嚱鏁拌〃涓煡鎵捐櫄鍑芥暟鍦板潃鑰屽鑷存ц兘闂銆備絾鏄繖閲屾湁涓涓?#8220;鎶宸?#8221;鏉ラ伩鍏嶈繖涓棶棰樸傛墍鏈夌殑瀵硅薄琚互闈欐佺殑鏂瑰紡瀹炰緥鍖栵紝濡備笅錛?

            idCommonLocal    commonLocal;                 // Implementation

            idCommon *       common = &commonLocal;       // Interface manipulated in the code

    榪欐牱緙栬瘧鍣ㄥ湪緙栬瘧鏃跺氨鍙互鍐沖畾琚皟鐢ㄧ殑鍑芥暟錛屼粠鑰屼笉鐢ㄥ幓鏌ユ壘铏氬嚱鏁拌〃銆傝繖瀹為檯涓婃槸涓涓弻璧紝since the pointer does not have to be dereferenced at runtime either since its address is known at compile time. 

    鏉傝錛氬凡緇忚榪?銆?嬈緄d Software寮曟搸鐨勬垜鍙戠幇錛屾湁涓浜涘嚱鏁板悕浠巇oom1寮濮嬪氨涓鐩存病鏈夋敼鍙樿繃錛氳礋璐e鐞嗛紶鏍囧拰娓告垙鏉嗚緭鍏ョ殑鍑芥暟浠嶇劧鍙獻N_frame()

     

    娓叉煋鍣?/strong>

        Doom3涓渶浠や漢鍏村鐨勫綋鐒舵槸娓叉煋鍣ㄩ儴鍒嗐傝繖閲屾湁澶鐨勫唴瀹癸紝鎵浠ユ垜灝嗚繖閮ㄥ垎鐨勭瑪璁板垎鍒板彟涓綃囨枃绔犻噷浜嗐傚湪榪欓噷
        濡傛灉浣犲錛堝満鏅級棰勫鐞嗗拰鍏ュ彛緋葷粺錛坧ortal system錛夊緢鎰熷叴瓚o紝鍙互鐪?a >榪欓噷銆?

     

    鏂扮殑鏍囧噯

        鏂扮殑鏍囧噯鍙互姒傛嫭涓轟竴涓瘝錛歎nification

        鍓嶄竴浠e紩鎿庡湪娓叉煋鎵鏈夊厓绱犵殑鏃跺欙紝浣跨敤鐨勬槸涓嶅悓鐨勬柟寮忥紝緇忓父瑕佽姳璐瑰緢闀挎椂闂寸殑棰勫鐞嗐俀uake2涓殑鍩轟簬鍏夎兘浼犻掔殑lightmap錛屽湪璁捐鑰呰兘鐪嬪埌鏈緇堢殑鏁堟灉鍓嶉渶瑕佺瓑寰堥暱鏃墮棿銆?

     

    鐗╃悊寮曟搸

    錛堣瘧娉細鍘熸枃榪欓噷娌℃湁鍐呭錛屽ぇ姒傝繕娌″啓濂斤級

     

    鑴氭湰鍜岃櫄鎷熸満

    錛堣瘧娉細鍘熸枃榪欓噷娌℃湁鍐呭錛屽ぇ姒傝繕娌″啓濂斤級

     

    鍦板浘鍔犺澆

        鎴戣蹇嗕腑錛屽姞杞芥墍娑堣楃殑鏃墮棿寰堥暱錛屾垜涓鐩存兂鐭ラ亾鍦ㄥ姞杞藉満鏅殑鏃跺欙紝紼嬪簭鑳屽悗閮藉仛浜嗕簺浠涔堛?

     

    緇撹

        It was not always easy to focus...

        But overall it was very educationnal to read most of it.



  • zgpxgame 2012-04-25 00:07 鍙戣〃璇勮
    ]]>
    Doom3婧愮爜鍓栨瀽錛?錛?-TypeInfohttp://www.shnenglu.com/zgpxgame/archive/2012/04/22/172361.htmlzgpxgamezgpxgameSun, 22 Apr 2012 12:28:00 GMThttp://www.shnenglu.com/zgpxgame/archive/2012/04/22/172361.htmlhttp://www.shnenglu.com/zgpxgame/comments/172361.htmlhttp://www.shnenglu.com/zgpxgame/archive/2012/04/22/172361.html#Feedback3http://www.shnenglu.com/zgpxgame/comments/commentRss/172361.htmlhttp://www.shnenglu.com/zgpxgame/services/trackbacks/172361.htmlTypeInfo妯″潡鏄?/span>Doom3涓敤浜庡姩鎬佺被鍨嬭瘑鍒紙RTTI錛夊拰杈呭姪鏌ラ敊鐨勬ā鍧楋紝鍙互媯嫻嬬被涓湭鍒濆鍖栧彉閲忋佹墦鍗版煇縐嶇被鍨嬬殑瀵硅薄涓墍鏈夋垚鍛樺彉閲忕殑鍊鹼紝鎴栨墦鍗版暣涓▼搴忎腑鎵鏈夊疄浣撳璞?/span>(idEntity)鐨勫箋傚湪鍐欑▼搴忚繃紼嬩腑錛屽彲鑳界粡甯鎬細鍑虹幇涓浜涚敱浜庢湭瀵規垚鍛樺彉閲忓垵濮嬪寲鑰屽鑷寸殑闂銆傝岃繖綾婚棶棰樹竴鑸湪Debug妯″紡涓嬫病鏈夐棶棰橈紝鍦?/span>Release鐗堟湰涓伓灝斿嚭鐜幫紝榪欏鑷村緢闅懼畾浣嶄笌闂鐩稿叧鐨勪唬鐮併?/span>

        闄や簡媯嫻嬫湭鍒濆鍖栫殑鍐呭瓨錛屽叾浠栨柟闈㈢殑搴旂敤錛屽彲浠ヤ粠TypeInfo.h涓殑鍑犱釜鍑芥暟鍙互鐣ョ涓浜屻?/span>

     /*
    =================================================================================== 

        Game Type Info

    ===================================================================================
    */

    // 鏍規嵁鍋忕Щ鍙栧緱鍙橀噺鍚?/span>
    const char * GetTypeVariableName( const char *typeName, int offset );
    // 鎵撳嵃鏌愪釜瀵硅薄鐨勪俊鎭?/span>
    void PrintType( const void *typePtr, const char *typeName );
    // 灝嗘煇瀵硅薄鍊煎啓鍏ユ枃浠?/span>
    void WriteTypeToFile( idFile *fp, const void *typePtr, const char *typeName );
    // 緇欐煇瀵硅薄鐨勬墍鏈夊彉閲忚瀹氫竴涓垵濮嬪?/span>
    void InitTypeVariables( const void *typePtr, const char *typeName, int value );
    // 鍒椾婦鎵鏈夌被鍨嬩俊鎭?/span>
    void ListTypeInfo_f( const idCmdArgs &args );
    // 灝嗘墍鏈夋父鎴忕姸鎬侊紙鎵鏈塱dEntity淇℃伅錛夊啓鍏ユ枃浠?/span>
    void WriteGameState_f( const idCmdArgs &args );
    // 姣旇緝娓告垙鐘舵?/span>
    void CompareGameState_f( const idCmdArgs &args );
    // 嫻嬭瘯淇濆瓨娓告垙
    void TestSaveGame_f( const idCmdArgs &args );


    緇忚繃鍑犲ぉ鐨勫姫鍔涳紝鎴戝皢
    TypfInfo鐩稿叧鐨勪唬鐮佹彁鍙栧嚭錛屽崟鐙垱寤轟簡宸ョ▼鏂囦歡錛屽茍鍋氫簡綆鍗曠殑浠g爜婕旂ず銆傛湁鐖卞ソ鐨勫悓瀛﹀彲浠ユ繁鍏ョ爺絀躲傜偣鍑?a title="榪欓噷" href="http://www.shnenglu.com/Files/zgpxgame/TypeInfo.rar">榪欓噷涓嬭澆銆傚湪宸ョ▼錛?/span> vs2010錛?/span> 涓紝Example鏄竴涓畝鍗曠殑婕旂ず紼嬪簭錛宨dLib鏄Doom3婧愮爜涓璱dLib鐨勫垹鍑忕増鏈俆ypeInfo鏄敓鎴怗ameTypeInfo.h綾誨瀷淇℃伅鐨勬帶鍒跺彴宸ュ叿銆?br />
    TypeInfo鐨勭敤娉曚負 typeinfo.exe [source_code_path] [out_file_name]

     

    瀹炵幇錛?/span>

    TypeInfo媯嫻嬫湭鍒濆鍖栧唴瀛樺疄鐜板師鐞嗕負錛屽浠g爜涓墍鏈夌殑澶存枃浠舵壂鎻忓垎鏋愶紝騫跺皢綾誨瀷涓紝鍙橀噺鍚嶏紝鍙橀噺綾誨瀷絳変俊鎭褰曠敓鎴愪竴涓?/span>GameTypeInfo.h鏂囦歡銆傜劧鍚庡湪new涓涓璞℃椂錛屼細鍏堝皢榪欎釜瀵硅薄鐨勫唴瀛樺垵濮嬪寲涓?/span>0xcdcdcdcd銆傚綋瀵硅薄鏋勯犲畬鎴愭椂錛屾嫻嬪璞″唴瀛樹腑鏄惁鏈夋煇鍊間負0xcdcdcdcd錛屽鏋滄湁錛屽氨閫氳繃GameTypeInfo.h涓褰曠殑綾誨瀷錛屽彉閲忓悕錛屽亸縐葷瓑淇℃伅灝嗘湭鍒濆鍖栫殑鍙橀噺淇℃伅鎵撳嵃鍑烘潵銆?/span>

    灝嗕笂榪拌繃紼嬪垎涓轟笁孌靛唴瀹癸細1. 瑙f瀽 2. 鐢熸垚綾誨瀷淇℃伅 3. 鍒╃敤綾誨瀷淇℃伅

     

    1. 瑙f瀽錛?/span>

    鍩烘湰鐨勮瘝娉曡В鏋愬湪idLib涓疄鐜幫紝鐩稿叧綾諱負idToken, idLexer, idParser銆?/span>

     

    2. 鐢熸垚綾誨瀷淇℃伅

    idTypeInfoGen鍒╃敤idParser鏉ヨВ鏋愪唬鐮佸ご鏂囦歡錛岃褰曠浉鍏崇被鍨嬩俊鎭紝綾誨瀷淇℃伅鍖呮嫭錛氬父閲忥紝鏋氫婦閲忓拰綾伙紙鍖呮嫭緇撴瀯浣擄級

     

    // 甯擱噺淇℃伅 
    typedef struct {
        const char * name;
        const char * type;
        const char * value;
    } constantInfo_t;

    // 鏋氫婦褰㈠彉閲忎俊鎭?/span>
    typedef struct {
        const char * name;
        int value;
    } enumValueInfo_t;

    // 鏋氫婦綾誨瀷淇℃伅
    typedef struct {
        const char * typeName;
        const enumValueInfo_t * values;
    } enumTypeInfo_t;

    // 綾繪垚鍛樺彉閲忎俊鎭?/span>
    typedef struct {
        const char * type;
        const char * name;
        int offset;
        int size;
    } classVariableInfo_t;

    // 綾葷殑綾誨瀷淇℃伅錛堝寘鎷粨鏋勪綋錛?/span>
    typedef struct {
        const char * typeName;
        const char * superType;
        int size;
        const classVariableInfo_t * variables;
    } classTypeInfo_t;

    鎵鏈変俊鎭褰曞湪GameTypeInfo.h涓紝璇︾粏鍐呭鍙互鏌ラ槄婧愪唬鐮併?br />
    3. 瀵圭被鍨嬩俊鎭殑鍒╃敤

    3.1 閫氳繃綾誨瀷鍚嶅垱寤哄疄渚嬨傚湪Doom3紼嬪簭鐨?/span>GamePlay灞傦紝涓昏鐨勭被閮芥槸浠?/span>idClass緇ф壙涓嬫潵鐨勶紝騫朵笖鍦ㄧ被澹版槑鍜屽畾涔夋椂錛岄氳繃idTypeInfo璁板綍綾誨瀷淇℃伅錛屽寘鎷褰曠被涔嬮棿鐨勭埗瀛愬叧緋匯傚湪綾諱腑鍔犲叆瀹?/span>CLASS_PROTOTYPE錛?/span> CLASS_DECLARATION鏉ュ疄鐜般?br />鍒涘緩綾誨疄渚嬫椂鏄繖鏍風殑錛?/span>

    idTypeInfo *cls;
    idClass *obj;
    cls = idClass::GetClass( "idPlayer" );
    obj = cls->CreateInstance();

     

        3.2 杈撳嚭鏈垵濮嬪寲鍙橀噺鐨勫悕縐般?/span>

         idClass涓噸杞戒簡new鎿嶄綔絎︼紝浠ヤ究璁板綍鍐呭瓨鐨勪嬌鐢ㄩ噺鍜屽垱寤虹殑瀵硅薄涓暟錛屽鏋滈渶瑕佹嫻嬫湭鍒濆鍖栫殑鍐呭瓨錛岃繕浼氬皢鍐呭瓨鍒濆鍖栦負0xcdcdcdcd銆?br />

    void * idClass::operator new( size_t s ) {
        int *p;

        s += sizeofint );
        p = (int *)Mem_Alloc( s );
        *p = s;
        memused += s;
        numobjects++;

    #ifdef ID_DEBUG_UNINITIALIZED_MEMORY
        unsigned long *ptr = (unsigned long *)p;
        int size = s;
        assert( ( size & 3 ) == 0 );
        size >>= 2;
        for ( int i = 1; i < size; i++ ) {
            ptr[i] = 0xcdcdcdcd;
        }
    #endif

        return p + 1;
    }

     

     
        瀵硅薄鍒涘緩鍚庯紝璋冪敤
    FindUninitializedMemory鏉ユ嫻嬫湭鍒濆鍖栫殑鍐呭瓨

    /*
    ================
    idClass::FindUninitializedMemory
    ================
    */
    void idClass::FindUninitializedMemory( void ) {
    #ifdef ID_DEBUG_UNINITIALIZED_MEMORY
        unsigned long *ptr = ( ( unsigned long * )this ) - 1;
        int size = *ptr;
        assert( ( size & 3 ) == 0 );
        size >>= 2;
        ptr = ( unsigned long * )this;
        for ( int i = 0; i < size; i++ ) {
            if ( ptr[i] == 0xcdcdcdcd ) {
                const char *varName = GetTypeVariableName( GetClassname(), i << 2 );
                idLib::Warning( "type '%s' has uninitialized variable %s (offset %d)", GetClassname(), varName, i << 2 );
            }
        }
    #endif
    }
        
        榪欓噷閫氳繃
     GetTypeVariableName 鍦ㄧ被鍨嬩俊鎭〃涓煡鎵懼彉閲忓悕縐般?br />

        3.3鎵撳嵃杈撳嚭鏌愪釜瀹炰緥鐨勬墍鏈夋垚鍛樺彉閲忓箋?/span>

     

             浠g爜瀹炵幇鍦═ypeInfo.cpp鏂囦歡涓紝娌℃湁浠旂粏鐮旂┒榪欐浠g爜瀹炵幇錛屽氨涓嶅湪榪欓噷鍗曞垪浜嗐?/p>

    zgpxgame 2012-04-22 20:28 鍙戣〃璇勮
    ]]>
    国产成人无码精品久久久免费| 天堂无码久久综合东京热| 久久亚洲AV成人无码电影| 久久精品国产亚洲AV高清热| 精品久久久久久久无码 | 国产精久久一区二区三区| 天天综合久久久网| 欧美激情精品久久久久久久九九九 | 久久97久久97精品免视看秋霞 | 久久强奷乱码老熟女网站| 亚洲精品蜜桃久久久久久| 亚洲成人精品久久| 无码精品久久久天天影视| 免费一级欧美大片久久网| 精品久久久久香蕉网| 亚洲国产成人久久笫一页| 久久久久久久尹人综合网亚洲| 久久人人爽人人爽人人片av麻烦| 99久久精品免费观看国产| 久久亚洲欧美国产精品| 欧美日韩精品久久久免费观看| 久久成人精品视频| 一本色道久久88精品综合 | 色综合久久天天综线观看| 国产一级做a爰片久久毛片| 久久丫精品国产亚洲av不卡| 国产69精品久久久久观看软件 | 伊人久久大香线蕉综合5g| 国产激情久久久久影院| 91久久精一区二区三区大全| 少妇高潮惨叫久久久久久| 久久无码中文字幕东京热| 久久久久这里只有精品| 久久激情五月丁香伊人| 国产午夜福利精品久久| 欧美日韩中文字幕久久伊人| 97热久久免费频精品99| 久久九九青青国产精品| 国产亚洲美女精品久久久| 精品一久久香蕉国产线看播放| 国产99久久久国产精品~~牛|