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

天行健 君子當自強而不息

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)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲国产小视频在线观看| 亚洲综合导航| 欧美成人一区二区| 日韩一区二区精品视频| 亚洲欧洲在线看| 欧美精品日韩一区| 亚洲影视九九影院在线观看| 99精品国产一区二区青青牛奶 | 性视频1819p久久| 亚洲欧美韩国| 在线观看成人网| 日韩视频免费观看高清完整版| 欧美日韩在线三级| 久久久精品国产免大香伊| 久久全球大尺度高清视频| 亚洲欧洲日夜超级视频| 在线一区视频| 国精品一区二区三区| 欧美 亚欧 日韩视频在线| 欧美精品日韩www.p站| 欧美一二三视频| 久久综合导航| 亚洲欧美视频| 蜜臀av国产精品久久久久| 亚洲一区二区三区在线播放| 久久精品国亚洲| 亚洲天堂免费观看| 久久男人av资源网站| 亚洲色图综合久久| 久久日韩粉嫩一区二区三区| 亚洲视频在线一区观看| 久久久久久电影| 亚洲综合视频一区| 欧美91大片| 久久久青草青青国产亚洲免观| 欧美了一区在线观看| 久久久精品一区二区三区| 欧美日产在线观看| 免费成人av| 国产亚洲亚洲| 亚洲专区国产精品| 中国成人在线视频| 麻豆精品视频在线观看视频| 欧美自拍偷拍午夜视频| 欧美日韩精品系列| 欧美寡妇偷汉性猛交| 韩国精品在线观看| 亚洲免费人成在线视频观看| 一本色道久久综合亚洲精品按摩 | 亚洲欧美另类在线| 99国产精品久久久久久久久久 | 国产精品久久久久久av福利软件| 欧美a级片一区| 狠狠久久亚洲欧美| 亚洲欧美中文日韩在线| 亚洲一区在线看| 欧美色欧美亚洲另类二区| 亚洲黄色成人网| 91久久综合| 欧美承认网站| 亚洲第一页自拍| 亚洲人成在线观看一区二区| 久久中文字幕一区| 欧美多人爱爱视频网站| 在线日韩中文字幕| 久久天天躁狠狠躁夜夜爽蜜月| 久久久久久一区| 激情五月***国产精品| 欧美在线观看一区| 免费成人在线观看视频| 精品99一区二区| 久久亚洲风情| 欧美激情一区二区三区成人| 亚洲青色在线| 欧美精品一区二区久久婷婷| 亚洲国产欧美日韩精品| 亚洲精品久久嫩草网站秘色| 欧美激情一区二区三区在线视频观看 | 国产偷自视频区视频一区二区| 亚洲性夜色噜噜噜7777| 欧美一区二区视频观看视频| 国产一区日韩一区| 六月婷婷一区| 日韩亚洲在线| 久久精品国产一区二区三区免费看 | 亚洲女女女同性video| 久久久国产成人精品| 亚洲高清av| 欧美日韩精品免费看| 午夜在线精品| 欧美大片在线看| 亚洲天堂成人| 娇妻被交换粗又大又硬视频欧美| 久久影视三级福利片| 亚洲精品一区二区三区樱花| 亚洲欧美在线一区二区| 在线观看一区| 欧美视频免费在线| 久久三级福利| 亚洲在线1234| 亚洲欧洲日产国产网站| 欧美在线视频免费播放| 亚洲精品国产拍免费91在线| 国产精品国码视频| 久久一区二区三区四区| 亚洲无玛一区| 91久久国产综合久久| 久久国产精品72免费观看| 亚洲精品亚洲人成人网| 国产日韩精品一区| 欧美日本中文字幕| 久久久久久成人| 亚洲午夜伦理| 亚洲精品乱码视频| 老司机免费视频久久| 亚洲欧美日韩精品一区二区| 亚洲福利免费| 国产一区二区毛片| 国产精品成人观看视频国产奇米| 久久综合狠狠综合久久综合88| 亚洲一区二区三区在线播放| 亚洲日本中文字幕| 久久综合伊人77777麻豆| 午夜精品久久久久影视| 一本色道久久综合狠狠躁篇怎么玩| 狠狠色噜噜狠狠色综合久| 国产精品久久久免费| 欧美日韩ab片| 欧美人与性动交α欧美精品济南到| 欧美综合第一页| 亚洲午夜成aⅴ人片| 一本久道久久综合中文字幕 | 亚洲淫性视频| 一区二区三区四区国产精品| 亚洲国产经典视频| 在线观看视频亚洲| 在线观看三级视频欧美| 精品福利免费观看| 伊甸园精品99久久久久久| 国产午夜精品全部视频在线播放 | 欧美日韩卡一卡二| 欧美精品久久久久久久久久| 牛夜精品久久久久久久99黑人 | 久久精品亚洲一区| 香蕉久久夜色精品国产| 午夜免费日韩视频| 久久国产精品亚洲va麻豆| 性欧美大战久久久久久久免费观看 | 亚洲精品久久久久| 亚洲日韩第九十九页| 亚洲看片网站| 亚洲视频日本| 午夜精品久久久久久99热软件| 午夜在线精品偷拍| 久久精品在线观看| 欧美成人久久| 欧美日韩一区在线观看| 国产精品美女在线| 狠狠综合久久av一区二区小说| 韩国精品主播一区二区在线观看| 怡红院精品视频在线观看极品| 亚洲福利久久| 一区二区欧美日韩视频| 翔田千里一区二区| 久久伊人免费视频| 亚洲人成网站精品片在线观看| 日韩午夜中文字幕| 午夜老司机精品| 牛牛国产精品| 国产精品亚洲片夜色在线| 国产一区二区三区四区三区四| 亚洲国产成人精品久久久国产成人一区 | 国产精品国产自产拍高清av王其| 国产精品午夜电影| 在线看无码的免费网站| 99ri日韩精品视频| 久久国产一区二区| 欧美激情视频一区二区三区免费| 日韩视频免费在线| 久久国产免费看| 欧美精品午夜视频| 国外成人在线视频网站| 99re6这里只有精品| 久久精品国产精品亚洲精品| 亚洲国产精品久久| 亚洲嫩草精品久久| 欧美激情综合在线| 黄网站色欧美视频| 亚洲一区二区三区色| 欧美二区在线| 亚洲欧美另类国产| 欧美日韩性生活视频| 在线观看的日韩av| 欧美在线资源| aa级大片欧美| 欧美va天堂| 亚洲高清av在线| 久热成人在线视频| 午夜精品久久久久99热蜜桃导演| 欧美理论电影网|