青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當(dāng)自強而不息

Putting Together a Full Game(9)

 

The Application init Function

As the starting point of the game, the init function initializes the system (including
the graphics, sound, and input systems), sets up the character and spell controllers,
loads the master item list, pushes the main menu state, and carries out a few miscellaneous
functions. Take a look at the Init function piece by piece to see what’s
going on:

bool cApp::init()
{
    create_display(g_hwnd, CLIENT_WIDTH, CLIENT_HEIGHT, 16, 
truetrue);
    set_perspective(0.6021124f, 1.3333f, 1.0f, 20000.0f);    

    ShowCursor(TRUE);

    create_font(&m_font, "Consolas", 16, 
falsefalse);

    m_input.create(g_hwnd, get_window_inst());
    m_keyboard.create_keyboard(&m_input);
    m_mouse.create_mouse(&m_input, 
true);

    m_sound.init(g_hwnd, 22050, 1, 16, DSSCL_PRIORITY);     
    m_sound_channel.create(&m_sound, 22050, 1, 16);
    m_music_channel.attach(&m_sound);

    
// load the master item list

    FILE* fp = fopen("..\\Data\\Game.mil", "rb");

    
if(fp == NULL)
        
return false;

    fread(m_mil, 1, 
sizeof(m_mil), fp);
    fclose(fp);

    
// initialize the character controller    

    m_game_chars.init(m_font, "..\\Data\\Game.mcl", m_mil, m_game_spells.get_spell_list(),
                      array_num(g_char_mesh_files), g_char_mesh_files,
                      "..\\Data\\", "..\\Data\\",
                      array_num(g_char_anims), g_char_anims);    
    
    m_game_chars.attach_app(
this);

    
// initialize the spell controller

    
if(! m_game_spells.init("..\\Data\\Game.msl", array_num(g_spell_mesh_files), g_spell_mesh_files, "..\\Data\\"))
        
return false;

    m_game_spells.attach_app(
this);

    m_game_chars.attach(&m_game_spells);
    m_game_spells.attach(&m_game_chars);

    m_game_script.attach_app(
this);

    
if(! load_texture_from_file(&m_charge_bar, "..\\Data\\ChargeBar.bmp", 0, D3DFMT_UNKNOWN))
        
return false;

    
// create the main, header, and stats text windows.
    m_text_window.create(m_font);
    m_text_header.create(m_font);
    m_text_stats.create(m_font);

    
// position all text windows
    m_text_window.move(2, 2, 636, 476, -1, -1, COLOR_DARK_BLUE, COLOR_ARGENTINE);
    m_text_header.move(2, 2, 128, 32,  -1, -1, COLOR_HALF_RED,  COLOR_ARGENTINE);
    m_text_stats.move(2,  2, 128, 48,  -1, -1, COLOR_DARK_BLUE, COLOR_ARGENTINE);

    
// push the main menu state, setting menu optios first.
    g_menu_options = MENU_LOAD;
    m_state_manager.push(menu_frame, 
this);

    
return true;
}

Graphics is the first order of business here—you initialize the graphics system and
set the video mode.  You then set the perspective to match that of the 3-D modeler
used to render the backdrops. Finally, you create a font to use throughout the
game and display the mouse cursor.

Next, you initialize the input system and create two device interfaces—one for the
keyboard and the other for the mouse.

Rounding out the Graphics Core initialization code, you initialize the sound system
and create the sound and music channels.

Now, you initialize the game-specific data and interfaces. You load the master item
list and initialize the character controller and spell controllers.

You're about halfway through the init function. At this point, you load a bitmap
that display the player's charge meter, and you create and position the text windows.

Rounding off the Init function, you make a call to the derived script class that tells
the script which application class interface to use. Following that, you push the first
of the game states, the main menu, onto the state stack.

 

The shutdown Function

What good is the Init function without a matching Shutdown function to shut down
and free used resources in the game? The cApp::shutdown function does just that.

void cApp::shutdown()
{
    m_state_manager.pop_all(
this);

    free_level();
}

 

Processing Frames with the frame Function

For every frame that the game is updated, the application class’s frame function is
called. To limit how often the game actually updates, however, a timer is maintained
that limits further frame processing to 30 frames a second. This process of limiting
the updates takes up the first half of the Frame function, as shown here:

bool cApp::frame()
{
    
static DWORD update_timer = timeGetTime();

    
// limit all frame updates to 30 fps
    if(timeGetTime() < update_timer + 33)
        
return true;

    update_timer = timeGetTime();

    m_keyboard.acquire();
    m_keyboard.read();
    m_mouse.acquire();
    m_mouse.read();

    
return m_state_manager.process_top(this);
}

As I mentioned, the game is updated 30 times a second. Each frame that the game
is updated, the keyboard and mouse’s states are read in, and the current state is
processed.

As states are inserted into the state stack, the uppermost
state executes when cManager::process_top is called, as shown in the frame function.

posted on 2007-12-29 21:04 lovedday 閱讀(277) 評論(0)  編輯 收藏 引用


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


公告

導(dǎo)航

統(tǒng)計

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美在线视频二区| 亚洲一区二区黄色| 六月婷婷久久| 久久国产主播| 亚洲国产精品国自产拍av秋霞| 久久久av毛片精品| 欧美在线视频二区| 狠狠色噜噜狠狠色综合久| 久久亚洲国产精品一区二区| 欧美中文在线观看| 亚洲国产精品一区二区第四页av| 欧美二区视频| 欧美日韩精品一二三区| 亚洲亚洲精品在线观看| 午夜精品一区二区三区在线播放 | 午夜一区不卡| 国内欧美视频一区二区| 欧美高清影院| 国产精品白丝jk黑袜喷水| 久久国产婷婷国产香蕉| 久久噜噜亚洲综合| 亚洲视频第一页| 欧美一区久久| 亚洲精品一二三区| 亚洲已满18点击进入久久| 一区久久精品| 亚洲精品影视| 精品1区2区3区4区| 日韩视频免费| 亚洲国产精品一区二区久| 99视频超级精品| 伊人成综合网伊人222| 日韩图片一区| 在线观看日韩欧美| 亚洲深夜福利| 亚洲精品免费在线观看| 先锋影音久久久| 中文一区二区在线观看| 久久免费国产精品1| 亚洲欧美视频在线| 欧美高清在线观看| 久久野战av| 国产精品99一区| 亚洲精品极品| 韩国成人福利片在线播放| 一区二区不卡在线视频 午夜欧美不卡在| 国产色爱av资源综合区| 一本色道久久综合精品竹菊 | 91久久久一线二线三线品牌| 亚洲一区二区精品在线| 日韩视频不卡中文| 久久久欧美精品sm网站| 欧美在线短视频| 国产精品第三页| 亚洲美女视频在线免费观看| 亚洲欧洲日韩综合二区| 久久久久久成人| 久久久99精品免费观看不卡| 国产精品一区二区三区免费观看| 夜夜爽夜夜爽精品视频| 99视频精品在线| 欧美电影免费观看高清| 亚洲国产成人av好男人在线观看| 在线成人av网站| 久久这里只有| 欧美激情影音先锋| 亚洲精品久久久久久久久久久久久| 久久久久久久尹人综合网亚洲| 午夜视频在线观看一区二区三区| 国产精品美女久久久久久免费| 亚洲图片欧美午夜| 先锋影音网一区二区| 国产精品欧美日韩一区| 亚洲午夜黄色| 欧美在线免费观看| 国内精品视频一区| 久久久综合网站| 欧美激情91| 在线亚洲欧美专区二区| 欧美视频观看一区| 亚洲欧美国产精品桃花| 久久免费高清视频| 伊人久久久大香线蕉综合直播 | 午夜精品国产更新| 欧美一级免费视频| 国内揄拍国内精品久久| 久久久精品999| 亚洲高清自拍| 亚洲男女自偷自拍图片另类| 国产欧美日本一区二区三区| 久久精品国产99精品国产亚洲性色| 免播放器亚洲| 亚洲无线视频| 好吊色欧美一区二区三区四区| 蜜臀av在线播放一区二区三区| 亚洲裸体视频| 久久国产一二区| 亚洲美女视频网| 国产日韩精品一区二区三区| 美国十次成人| 亚洲一区影院| 亚洲高清一区二| 欧美一区二区三区免费视频| 亚洲国产欧美另类丝袜| 国产精品大全| 欧美高清在线精品一区| 亚洲欧美在线x视频| 亚洲福利av| 欧美影院久久久| 99国产成+人+综合+亚洲欧美| 国产精品视频久久一区| 欧美黄色一区二区| 久久精品国产久精国产思思| 99国产一区| 欧美福利专区| 久久午夜av| 午夜精品视频在线观看| 亚洲精品免费看| 在线观看欧美激情| 国产九区一区在线| 欧美日韩国内自拍| 乱中年女人伦av一区二区| 亚洲一区二区视频在线| 亚洲国产精品福利| 麻豆freexxxx性91精品| 亚洲欧美在线免费观看| 日韩视频在线免费| 亚洲国产高清高潮精品美女| 国产在线不卡精品| 国产伦精品一区二区三区高清版| 欧美国产一区二区| 美脚丝袜一区二区三区在线观看| 欧美在线视频观看免费网站| 亚洲午夜久久久久久久久电影网| 最新国产乱人伦偷精品免费网站| 免费久久99精品国产自在现线| 欧美在线观看视频一区二区三区| 亚洲免费人成在线视频观看| 这里只有精品在线播放| 亚洲精品在线观| 亚洲精品一二三| 亚洲欧洲日韩在线| 亚洲激情社区| 91久久夜色精品国产九色| 亚洲高清精品中出| 伊人狠狠色丁香综合尤物| 国产在线观看一区| 一区二区在线视频| 亚洲国产日韩一级| 亚洲欧洲日产国码二区| 亚洲精品在线视频观看| 日韩午夜免费视频| 一本久久青青| 午夜欧美大尺度福利影院在线看| 亚洲免费在线视频一区 二区| 午夜亚洲一区| 久久视频在线看| 亚洲大片免费看| 99精品视频一区二区三区| 亚洲精品一区二区三区99| 亚洲免费不卡| 午夜精品网站| 蜜桃av久久久亚洲精品| 欧美www视频| 欧美区日韩区| 国产无一区二区| 亚洲精品黄色| 午夜精品久久久久久99热| 久久久久国产精品人| 欧美成人dvd在线视频| 亚洲国产欧美日韩| 亚洲婷婷综合色高清在线| 欧美一区二区三区日韩| 免费人成网站在线观看欧美高清| 欧美日本亚洲韩国国产| 国产精品区一区二区三区| 在线免费观看一区二区三区| 亚洲激情视频网| 欧美一区二区三区免费视| 男人的天堂成人在线| av成人免费在线观看| 久久精品国产亚洲aⅴ| 欧美日韩中文字幕在线视频| 国内揄拍国内精品久久| 夜夜嗨av一区二区三区免费区| 欧美在线视频一区二区三区| 欧美顶级少妇做爰| 亚洲男人第一av网站| 另类综合日韩欧美亚洲| 国产精品婷婷午夜在线观看| 亚洲三级国产| 久久精品国产欧美激情| 日韩网站在线观看| 久久免费精品日本久久中文字幕| 欧美视频在线一区二区三区| 亚洲国产美女精品久久久久∴| 久久国产高清| 亚洲视频国产视频| 欧美激情精品久久久六区热门| 国产在线视频欧美|