Mais conteúdo relacionado
Semelhante a C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜 (20)
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
- 6. 開発環境
VisualStudio C++ 2008 + Dxlib(少しだけSTL)
何故Dxlibにしたか
一番は対戦アクション+4人対応でゲームパッド対応にし
たかった
XNAだと別途作成が必要
Dxlibだと、描画・ゲームパッド・サウンドの条件がそろっ
ていた
日本語のドキュメントがすごく多い
- 11. ソースコードがないので出してみる
void Animation::Draw(int apid,Positiondata position_)
{
if(aplist_.at(apid).graphic_list_.size() > 1)
{
int curpat = GameLoop::GetAnimationCount()
/ aplist_.at(apid).animation_gap_ % aplist_.at(apid).graphic_list_.size();
DrawGraph(position_.x_,position_.y_,aplist_.at(apid).graphic_list_.at(curpat),true);
}
else
{
DrawGraph(position_.x_,position_.y_,aplist_.at(apid).graphic_list_.at(0),true);
}
}
- 13. GameLoop ゲームの基本ループで
す
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE
hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
GameLoop *main = new GameLoop(); // GameLoop Class
main->Init(); // Initialize
main->doMainLoop(); // Main Loop
delete main; // Game Main Exit
return 0; // Program Exit
}
- 14. GameLoop 初期化編
void GameLoop::Init()
{
ChangeWindowMode(TRUE);
SetMainWindowText("バoトgル?アAクNシVョ?ン? for Kawaz");
~
Effect::LoadFiles();
SoundBox::Set_Sound(Sound_Load("Soundbgmbattle_kawaz_select_intro_draft.wav"));
SoundBox::Set_Sound(Sound_Load("Soundbgmbattle_kawaz_select_loop_draft.wav"));
SoundBox::Set_Sound(Sound_Load("Soundbgmbattle_kawaz_title-theme-of-kawaz-tan.wav"));
ISceneManager::Scene_Change(new TitleScene());
ISceneManager::Scene_Init();
}
エフェクトの読み込み
サウンドファイルの設定
タイトル画面の設定
- 15. GameLoop メイン部分
void GameLoop::doMainLoop()
{
while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
ClsDrawScreen();
ISceneManager::Scene_Execute();
ScreenFlip();
FpsLoop();
}
}
異常終了するか
終了ボタンを押されるまで繰り返される
- 17. ISceneManager クラス構成
class ISceneManager
{
private:
ISceneManager(){};
~ISceneManager();
static IScene *pointer_scene;
static ISceneManager *pointer_manager;
public:
static void Scene_Init();
static void Scene_Execute();
static void Scene_Change(IScene* work_scene);
};
シーンの初期化
シーンの切り替え
- 21. サウンド関連クラス
class SoundBox
{
private:
static vector<int> sound_list_;
static int bgm_number_;
static int bgm_flag_;
static int se_flag_;
Public:
~
static int Set_Sound(int sound_handle_);
static int Get_Sound_Number(){ return sound_list_.size()-1;}
static int Get_Bgm_Flag(){ return bgm_flag_;}
static int Get_Se_Flag(){ return se_flag_;}
static void Play(int sound_num_);
static void Stop(int sound_num_);
static void Stop_Bgm();
static void Play_Bgm_Loop(int sound_num_);
static void Play_Bgm_Back(int sound_num_);
static void Set_Bgm_Flag(int work_bgm_){ bgm_flag_=work_bgm_;}
static void Set_Se_Flag(int work_se_){ se_flag_ = work_se_;}
- 23. サウンド利用例
void BattleScene::Bgm_Check()
{
if(SoundBox::Sound_Check() == 0){
bgm_count_++;
if(bgm_count_ >= 3){
bgm_count_ = 0;
}
SoundBox::Play_Bgm_Back(battle_bgm_pattern_[bgm_count_]);
}
}
サウンドがなっている間は継続して終了していた場合は次の演奏を開始している