• <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++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              57 Posts :: 2 Stories :: 57 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(10)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            1.2008/9/10 3:51:40

            2.glest再分析

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

            // 所以這個(gè)是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)建一個(gè)程序
              program= new Program();
              //創(chuàng)建一個(gè)窗口 以程序指針放在窗口里 可以調(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.體誤是窗口里有程序指針 程序里有窗口指針 兩個(gè)互相叼


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

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


            7.MainWindow這個(gè)類是把設(shè)置一個(gè)程序指針在里面 然后把消息交給程序處理 繼成那個(gè)WindowGl類
             將消息交給程序 處理消息這個(gè)東西應(yīng)該在繼成的類中
             因?yàn)槲覠o(wú)看見

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


            -----------------可耕地可耕地枯無(wú)可奈何花落去 可耕地--------------

            11.Program竟然無(wú)繼成什么東西喔 用的是內(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.看那個(gè)initNormal吧
             void Program::initNormal(WindowGl *window){
             init(window);
             setState(new Intro(this));
            }

            13.好 看那個(gè)init(window)吧 我考 這么的長(zhǎng) 真長(zhǎng)呀 長(zhǎng)呀

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

             //window窗口的創(chuàng)建也是在這里的 暈死 程序走向也太那個(gè)了吧
             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 時(shí)間的東西
             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 語(yǔ)言吧這里是語(yǔ)言吧
             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í)得到游戲的核心數(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.看那個(gè)setState吧 無(wú)意思 不解析
            void Program::setState(ProgramState *programState){
             
             delete this->programState;
             
             this->programState= programState;
             programState->load();
             programState->init();

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

            15.看這個(gè) 竟然有個(gè)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.看這個(gè) 嗯 loop吧 在這里 程序也基本上出來(lái)了 不也就是這樣的
            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é)-----------------------
            看來(lái)全在program中調(diào)用成員來(lái)做 辛苦 窗口也放在了程序里了
            嗯 應(yīng)該就可以看其他的子模塊了 main好似已經(jīng)被我拆解了
            --------------------------------------------


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

            18.看來(lái)main還未被我拆解喔

            19.那么我繼續(xù)
            這個(gè)是設(shè)置那個(gè)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í)設(shè)置那個(gè)mian架構(gòu)是建立在那個(gè)嗯 之上的
            在一個(gè)state之下 有一些繼成 然后在繼成里做一些東西 再交給指定的工人做乜

             


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

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


            2008/9/11 20:36:18
             

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

            Feedback

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


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


            久久综合狠狠综合久久| 久久久久婷婷| 久久久久久精品成人免费图片| 国产一区二区三区久久精品| 久久综合久久自在自线精品自| 97精品伊人久久大香线蕉| 亚洲乱码日产精品a级毛片久久| 国内精品久久久久久久久电影网| 国产成人久久777777| 国内精品久久久久久不卡影院 | 亚洲日本va午夜中文字幕久久 | 成人免费网站久久久| 久久无码人妻一区二区三区| 久久精品人成免费| 18岁日韩内射颜射午夜久久成人| 国产精品九九九久久九九| 亚洲乱亚洲乱淫久久| 日本加勒比久久精品| 午夜人妻久久久久久久久| 97久久超碰成人精品网站| 久久精品18| 亚洲精品白浆高清久久久久久| 久久99国产精品尤物| 久久99精品久久久久久9蜜桃 | 一本久久a久久精品vr综合| 亚洲午夜无码久久久久| 亚洲国产精品久久久久婷婷软件| 久久av高潮av无码av喷吹| 波多野结衣久久一区二区| 久久久久亚洲AV无码网站| 久久国产精品免费一区二区三区| 人人妻久久人人澡人人爽人人精品| 久久婷婷国产综合精品| 老司机午夜网站国内精品久久久久久久久| 欧美成人免费观看久久| 精品久久香蕉国产线看观看亚洲| 久久精品免费大片国产大片| 香蕉久久夜色精品升级完成| 久久久久久久国产免费看| 精品久久久久久亚洲精品| 久久青青草视频|