• <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>

            3D FPS

            1234567890

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              57 Posts :: 2 Stories :: 57 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(10)

            我參與的團(tuán)隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            1.2008/9/10 3:51:40

            2.glest再分析

            3.分析方法同表現(xiàn)形式都以文本來體現(xiàn)

            // 所以這個是main
            4.int glestMain(int argc, char** argv){

             MainWindow *mainWindow= NULL;
             Program *program= NULL;
             ExceptionHandler exceptionHandler;
             exceptionHandler.install();

             try{
              //配置文件的 程序開啟的
              Config &config = Config::getInstance();

              showCursor(config.getBool("Windowed"));
              //創(chuàng)建一個程序
              program= new Program();
              //創(chuàng)建一個窗口 以程序指針放在窗口里 可以調(diào)用窗口內(nèi)的程序
              mainWindow= new MainWindow(program);

              //分析命令行 然后就根據(jù)程序設(shè)置窗口
              if(argc==2 && string(argv[1])=="-server"){
               program->initServer(mainWindow);
              }
              else if(argc==3 && string(argv[1])=="-client"){
               program->initClient(mainWindow, Ip(argv[2]));
              }
              else{
               program->initNormal(mainWindow);
              }

              //main loop
              while(Window::handleEvent()){
               program->loop();
              }
             }
             catch(const exception &e){
              restoreVideoMode();
              exceptionMessage(e);
             } 

             delete mainWindow;

             return 0;
            }

            5.體誤是窗口里有程序指針 程序里有窗口指針 兩個互相叼


            6.如是這樣 就是《配置,窗口,程序,錯誤》這么4個類
            所以一個一個分析

            -----------------我是頂頂頂頂?shù)姆指罹€------------------------


            7.MainWindow這個類是把設(shè)置一個程序指針在里面 然后把消息交給程序處理 繼成那個WindowGl類
             將消息交給程序 處理消息這個東西應(yīng)該在繼成的類中
             因為我無看見

            8.WindowGl這個類繼成Window這個類
             內(nèi)有一個ContextGl實例類 還有3個方法initGl,makeCurrentGl,swapBuffersGl
             三個方法基本上就是ContextGl的方法 看來就真的是這樣的GL布局的Windows
             
             
            9.好 看window這個類 基本上這個才真正的是一個window窗口了
             看看先 成員有好多 先看私有成員
              1.一個map 包窗口句柄與窗口指針 具體作用暫時不知道 應(yīng)該保存東西 就保存窗口的 的吧
              2.成員里有好多標(biāo)志的東西 還有好多屬性的東西 都是窗口的 關(guān)于大小 長寬 全屏 句柄 設(shè)備DC
             好 看成員函數(shù)
              1.好多get set 應(yīng)該是成員屬性多吧
              2.重要的createWindow
                  registerWindow
                  LRESULT CALLBACK Window::eventRouter
                  Window::handleEvent
                   
              3.看得出像普通窗口一樣就設(shè)置回調(diào)消息函數(shù)
             OK 這個類無繼成什么東西了 應(yīng)該是根的了
             
             
            10.看那個program吧


            -----------------可耕地可耕地枯無可奈何花落去 可耕地--------------

            11.Program竟然無繼成什么東西喔 用的是內(nèi)插的方法
              比較重要的 ProgramState *programState;
                    PerformanceTimer fpsTimer;
                    WindowGl *window;
                   
              成員函數(shù)有 1. initNormal(WindowGl *window);
                      initServer(WindowGl *window);
                       initClient(WindowGl *window, const Ip &serverIp);
                      
                    2.mouse key 的處理
                    3.init,loop,setState,setDisplaySettings
                    
            12.看那個initNormal吧
             void Program::initNormal(WindowGl *window){
             init(window);
             setState(new Intro(this));
            }

            13.好 看那個init(window)吧 我考 這么的長 真長呀 長呀

            void Program::init(WindowGl *window){
             //最基本的要設(shè)置 的 窗口與配置啦
             this->window= window;
             Config &config= Config::getInstance();
             
               //set video mode設(shè)置顯示的模式
             setDisplaySettings();

             //window窗口的創(chuàng)建也是在這里的 暈死 程序走向也太那個了吧
             window->setText("Glest");
             window->setStyle(config.getBool("Windowed")? wsWindowedFixed: wsFullscreen);
             window->setPos(0, 0);
             window->setSize(config.getInt("ScreenWidth"), config.getInt("ScreenHeight"));
             window->create();
              
             //timers 時間的東西
             fpsTimer.init(1, maxTimes);
             updateTimer.init(GameConstants::updateFps, maxTimes);
             updateCameraTimer.init(GameConstants::cameraFps, maxTimes);

               //log start 日志的東西
             Logger &logger= Logger::getInstance();
             logger.setFile("glest.log");
             logger.clear();

             //lang 語言吧這里是語言吧
             Lang &lang= Lang::getInstance();
             lang.load("data/lang/"+ config.getString("Lang"));
               
             //render 渲染器的東西
             Renderer &renderer= Renderer::getInstance();

             window->initGl(config.getInt("ColorBits"), config.getInt("DepthBits"), config.getInt("StencilBits"));
             window->makeCurrentGl();
              
             //coreData, needs renderer, but must load before renderer init這時得到游戲的核心數(shù)據(jù)data
             CoreData &coreData= CoreData::getInstance();
                coreData.load();

             //init renderer (load global textures)OK這里渲染 是吧 應(yīng)該
             renderer.init();

             //sound 這里是聲音吧
             SoundRenderer &soundRenderer= SoundRenderer::getInstance();
             soundRenderer.init(window);
            }

            14.看那個setState吧 無意思 不解析
            void Program::setState(ProgramState *programState){
             
             delete this->programState;
             
             this->programState= programState;
             programState->load();
             programState->init();

             updateTimer.reset();
             updateCameraTimer.reset();
             fpsTimer.reset();
            }

            15.看這個 竟然有個MainMenu的東西 應(yīng)該是菜單的 不敢確定
            void Program::initClient(WindowGl *window, const Ip &serverIp){
             MainMenu* mainMenu= NULL;
             
             init(window);
             mainMenu= new MainMenu(this);
             setState(mainMenu);
             mainMenu->setState(new MenuStateJoinGame(this, mainMenu, true, serverIp));
            }

            16.看這個 嗯 loop吧 在這里 程序也基本上出來了 不也就是這樣的
            void Program::loop(){

             //render
             programState->render();

             //update camera
             while(updateCameraTimer.isTime()){
              programState->updateCamera();
             }

             //update world
             while(updateTimer.isTime()){
              GraphicComponent::update();
              programState->update();
              SoundRenderer::getInstance().update();
              NetworkManager::getInstance().update();
             }
             
             //fps timer
             while(fpsTimer.isTime()){
              programState->tick();
             }
            }

            ---------------------小結(jié)-----------------------
            看來全在program中調(diào)用成員來做 辛苦 窗口也放在了程序里了
            嗯 應(yīng)該就可以看其他的子模塊了 main好似已經(jīng)被我拆解了
            --------------------------------------------


            17.ProgramState 這個比較關(guān)鍵喔 是狀態(tài) 從字面上來理解 應(yīng)該要看看
            ProgramState竟然放了一個放一個program指針后 全是虛擬成員函數(shù) 看來是一個標(biāo)準(zhǔn)的東西

            18.看來main還未被我拆解喔

            19.那么我繼續(xù)
            這個是設(shè)置那個state的 好明顯是交給了programstate了
            void Program::setState(ProgramState *programState){
             
             delete this->programState;
             
             this->programState= programState;
             programState->load();
             programState->init();

             updateTimer.reset();
             updateCameraTimer.reset();
             fpsTimer.reset();
            }

            很有可能走去了這里 不過我還不清楚
            void Game::load(){
             Logger::getInstance().setState(Lang::getInstance().get("Loading"));
             
             //tileset
                world.loadTileset(gameSettings.getTilesetPath(), &checksum);

                //tech, load before map because of resources
                world.loadTech(gameSettings.getTechPath(), &checksum);

                //map
                world.loadMap(gameSettings.getMapPath(), &checksum);
            }

            20.暫時設(shè)置那個mian架構(gòu)是建立在那個嗯 之上的
            在一個state之下 有一些繼成 然后在繼成里做一些東西 再交給指定的工人做乜

             


            --------------我是不知道做什么的分割線-------------

            21.好吧 這個就當(dāng)是一個main的cpp吧


            2008/9/11 20:36:18
             

            posted on 2008-09-20 08:57 DK_jims 閱讀(980) 評論(1)  編輯 收藏 引用

            Feedback

            # re: glest開源代碼大概的分析[未登錄] 2012-04-28 16:42 snow
            你把最簡單的分析了  回復(fù)  更多評論
              


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


            91精品国产91久久久久久| 久久精品无码一区二区无码| 精品久久久久久综合日本| 久久国产精品一区二区| 久久亚洲2019中文字幕| 中文字幕无码免费久久| 国产高清美女一级a毛片久久w| 久久久久亚洲AV无码观看 | 一本久久a久久精品vr综合| 欧洲成人午夜精品无码区久久| 伊人色综合久久天天| 久久天天躁狠狠躁夜夜avapp| 2021久久精品国产99国产精品| 久久精品国产国产精品四凭| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 欧美久久综合九色综合| AV无码久久久久不卡网站下载 | 久久亚洲AV无码精品色午夜麻豆| 国产精品免费看久久久| 国产99久久久国产精品小说| 久久免费精品视频| 久久久久免费看成人影片| 思思久久99热只有频精品66| 国产精品美女久久久免费| 久久婷婷成人综合色综合| 久久人妻AV中文字幕| 色天使久久综合网天天| 久久久精品视频免费观看| 91精品国产综合久久四虎久久无码一级| 午夜欧美精品久久久久久久| 精品熟女少妇AV免费久久| 亚洲欧洲久久av| 久久免费看黄a级毛片| 热久久视久久精品18| 久久青青草视频| 伊人久久综合无码成人网| 久久这里都是精品| 亚洲精品无码久久一线| 伊人久久大香线蕉综合Av| 久久久久国产精品嫩草影院| 97久久国产综合精品女不卡 |