Submit Search
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
4 likes
5,277 views
勝成 鈴江
札幌C++勉強会でゲームプログラミングがおだいになったときのスライドです
Read more
1 of 29
Download now
Downloaded 11 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
More Related Content
PDF
C++11概要 ライブラリ編
egtra
PDF
ゲーム開発者のための C++11/C++14
Ryo Suzuki
PPTX
Map
kikairoya
PPT
C++でHello worldを書いてみた
firewood
PDF
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
PDF
templateとautoの型推論
MITSUNARI Shigeo
PPTX
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
PDF
組み込みでこそC++を使う10の理由
kikairoya
C++11概要 ライブラリ編
egtra
ゲーム開発者のための C++11/C++14
Ryo Suzuki
Map
kikairoya
C++でHello worldを書いてみた
firewood
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
templateとautoの型推論
MITSUNARI Shigeo
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
組み込みでこそC++を使う10の理由
kikairoya
What's hot
(20)
PDF
Emcjp item21
MITSUNARI Shigeo
PDF
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
PDF
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
PPTX
Visual C++で使えるC++11
nekko1119
PDF
クロージャデザインパターン
Moriharu Ohzu
PPTX
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
PDF
Pfi Seminar 2010 1 7
Preferred Networks
PPTX
競技プログラミングのためのC++入門
natrium11321
PDF
C++14 Overview
Akira Takahashi
PDF
20141128 iOSチーム勉強会 My Sweet Swift
necocen
PDF
Ekmett勉強会発表資料
時響 逢坂
PDF
unique_ptrにポインタ以外のものを持たせるとき
Shintarou Okada
ODP
Ekmett勉強会発表資料
時響 逢坂
PDF
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
PDF
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
PDF
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
PDF
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
PDF
emc++ chapter32
Tatsuki SHIMIZU
PDF
Emcpp item31
mitsutaka_takeda
PPTX
Ocaml lecture slides 01 at axsh
Tomofumi Hayashi
Emcjp item21
MITSUNARI Shigeo
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
Visual C++で使えるC++11
nekko1119
クロージャデザインパターン
Moriharu Ohzu
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
Pfi Seminar 2010 1 7
Preferred Networks
競技プログラミングのためのC++入門
natrium11321
C++14 Overview
Akira Takahashi
20141128 iOSチーム勉強会 My Sweet Swift
necocen
Ekmett勉強会発表資料
時響 逢坂
unique_ptrにポインタ以外のものを持たせるとき
Shintarou Okada
Ekmett勉強会発表資料
時響 逢坂
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
emc++ chapter32
Tatsuki SHIMIZU
Emcpp item31
mitsutaka_takeda
Ocaml lecture slides 01 at axsh
Tomofumi Hayashi
Ad
Similar to C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
(20)
PDF
enchant.js勉強会
Hiroaki Murayama
PDF
2012 03-03-titanium plusquicktigame2d
Hiroshi Oyamada
PDF
Creators'night#14今井
Daisuke Imai
PPTX
Osakijs #01 「enchant.jsハンズオン資料」
Yusuke HIDESHIMA
PDF
Androidプログラミング初心者のためのゲームアプリ開発入門
Masahiko Mizuta
KEY
Sencha study
Shinsuke Sugita
PDF
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
Ryota Shiroguchi
PPTX
どこでも動くゲームを作るためのベタープラクティス
5mingame2
PPTX
Unity C#3からC#6に向けて
onotchi_
PDF
StackExchangeで見たシステムプログラミング案件
yaegashi
PDF
Python physicalcomputing
Noboru Irieda
PDF
Pythonでゲーム作る
amusementcreators
PDF
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Atsushi Tadokoro
PDF
How to use animation packages in R(Japanese)
sleipnir002
PDF
Siv3Dで楽しむゲームとメディアアート開発
Ryo Suzuki
PDF
Acme minechan
takesako
PDF
Python で munin plugin を書いてみる
ftnk
PDF
Glfw3,OpenGL,GUI
hira_kuni_45
PDF
enchant.jsでゲーム制作をはじめてみよう
Ryota Shiroguchi
PDF
GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社
Game Tools & Middleware Forum
enchant.js勉強会
Hiroaki Murayama
2012 03-03-titanium plusquicktigame2d
Hiroshi Oyamada
Creators'night#14今井
Daisuke Imai
Osakijs #01 「enchant.jsハンズオン資料」
Yusuke HIDESHIMA
Androidプログラミング初心者のためのゲームアプリ開発入門
Masahiko Mizuta
Sencha study
Shinsuke Sugita
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
Ryota Shiroguchi
どこでも動くゲームを作るためのベタープラクティス
5mingame2
Unity C#3からC#6に向けて
onotchi_
StackExchangeで見たシステムプログラミング案件
yaegashi
Python physicalcomputing
Noboru Irieda
Pythonでゲーム作る
amusementcreators
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Atsushi Tadokoro
How to use animation packages in R(Japanese)
sleipnir002
Siv3Dで楽しむゲームとメディアアート開発
Ryo Suzuki
Acme minechan
takesako
Python で munin plugin を書いてみる
ftnk
Glfw3,OpenGL,GUI
hira_kuni_45
enchant.jsでゲーム制作をはじめてみよう
Ryota Shiroguchi
GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社
Game Tools & Middleware Forum
Ad
More from 勝成 鈴江
(16)
PPTX
Playfabmeetup#4
勝成 鈴江
PPT
Rebirth chronicle
勝成 鈴江
PPTX
ドリトルのすすめ
勝成 鈴江
PPTX
探検企画書
勝成 鈴江
PPTX
Ggj2015での開発話
勝成 鈴江
ODP
MonoGame村からこんにちは
勝成 鈴江
ODP
ぼくはきみの盾 ドキュメントコメント編
勝成 鈴江
PDF
Turtlewars
勝成 鈴江
PDF
ぼくはきみの盾 ツール-データ編
勝成 鈴江
ODP
ぼくはきみの盾-Redmine編
勝成 鈴江
ODP
としなべ!! 企画書
勝成 鈴江
ODP
GGJ練習 没案 公開用資料
勝成 鈴江
ODP
おにぎりで鬼を斬る
勝成 鈴江
ODP
柏鯉
勝成 鈴江
ODP
Ggj2014に参加したカメのお話
勝成 鈴江
ODP
まわーるどが1週するまでのお話
勝成 鈴江
Playfabmeetup#4
勝成 鈴江
Rebirth chronicle
勝成 鈴江
ドリトルのすすめ
勝成 鈴江
探検企画書
勝成 鈴江
Ggj2015での開発話
勝成 鈴江
MonoGame村からこんにちは
勝成 鈴江
ぼくはきみの盾 ドキュメントコメント編
勝成 鈴江
Turtlewars
勝成 鈴江
ぼくはきみの盾 ツール-データ編
勝成 鈴江
ぼくはきみの盾-Redmine編
勝成 鈴江
としなべ!! 企画書
勝成 鈴江
GGJ練習 没案 公開用資料
勝成 鈴江
おにぎりで鬼を斬る
勝成 鈴江
柏鯉
勝成 鈴江
Ggj2014に参加したカメのお話
勝成 鈴江
まわーるどが1週するまでのお話
勝成 鈴江
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
1.
C++でのゲームプログラミングをしたときのお話
札幌C++勉強会 #4 〜スタートゲームプログラミング〜 発表者 @sakuriver
2.
自己紹介 サク・リバー(@sakuriver) お仕事 PHPプログラマー Kawaz(gccsap)所属
C++は趣味な子 23歳
3.
本日の対象者 C++触っているけどゲーム作ったこ とがない ゲームを作りたい方 クラスとかに興味がある方
4.
こんな方は注意 C++マスター ゲーム作るの興味がない ろくろを回している方 Mainファイルに3万行以上書いてゲームを作れる 方
5.
セッションで紹介するゲーム かわずたん大乱闘 対戦2Dアクションゲームです Kawazの春イベントで作成
僕はプログラマーとして参加 100聞は一見にしかず
6.
開発環境 VisualStudio C++ 2008
+ Dxlib(少しだけSTL) 何故Dxlibにしたか 一番は対戦アクション+4人対応でゲームパッド対応にし たかった XNAだと別途作成が必要 Dxlibだと、描画・ゲームパッド・サウンドの条件がそろっ ていた 日本語のドキュメントがすごく多い
7.
Dxlibについて WindowsAPIのDirectXのラッパです 描画やサウンド関係の関数が一通りそろっている 山田 巧さんによって作成されています 半年前に確認をしたら、3D機能周りが充実され てきていました
8.
ゲームの基本要素 画像描画・音楽処理 キャラクターを動かしたりエフェクトで利用する BGMと効果音を分けて鳴らす 入力処理
キーボード・マウス・ゲームパッド ボタンの入力許可 シーン遷移 タイトル→キャラクター選択 ↑ 上記をループ処理で取得している
9.
一般のプログラムと違うところ オンライン上のゲームでなければDBは使わない 仕様があんまし正しくない トライ&エラーがすごく大切 妄想の企画そのままで作っても面白くなかったら却下
作っていく途中で仕様増えます クラスや継承が役に立つ いろんな種類のキャラクターや武器ごとに変更部分だ け作り変える
10.
僕の考える描画クラス 描画関数はdxlibあるんでしょ? 回転させたり、拡大させるだけで別のメソッド名が
ちょっとめんどくさかった 後、エフェクトやキャラクターのモーション上アニ メーションをデータとして持つ必要があった 0 1 2 3 4 5 6 7
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); } }
12.
ん? GameLoop::GetAnimationCount() ↑このクラスなんだろう?
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(); } } 異常終了するか 終了ボタンを押されるまで繰り返される
16.
IsceneManager ← シーン管理クラス シーンを管理するってどういうこと? ゲームは構成が分かれる
選択されている画面の処理を実 行する構成にしていないと処理 速度や拡張性としてつらい
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); }; シーンの初期化 シーンの切り替え
18.
IsceneManager シーン実行 void ISceneManager::Scene_Execute() {
pointer_manager->pointer_scene->Update(); pointer_manager->pointer_scene->Draw(); } 更新処理(ユーザの操作・伽羅関連の処理など) ↓ 描画処理(アニメーションも含む)
19.
入力処理 タイトル画面の操作ごとに分かれるのでシーンク ラスを継承した該当クラスごとに記述している 後は、コントローラーの番号でマッピングしてい る
20.
これで基本部分終わったー ん? まてよ ・・・音が鳴らない ということで、サウンド周りの紹介
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_;}
22.
サウンドクラス処理 音楽素材の管理(Vectorを使用) BGMとSEをそれぞれでフラグ管理 DXLIBではループ再生とバック再生で別々なの で、メソッドで作り直し イントロ→ループ→ループ→イントロなどが複数 パターン予定があったのでリストで管理する必
要があった
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_]); } } サウンドがなっている間は継続して終了していた場合は次の演奏を開始している
24.
ここまででやったこと キャラクターの描画・アニメーション シーン遷移 ゲームのループ処理 サウンド処理
25.
補足 ゲームプログラミングでほかと違うのは素材関連 の処理と常にループしている部分の速度を考え るところ位 ゲームを作るときに大切なのは技術より動画を見
たり何回もプレイしてのトライアンドエラーが 出来るか → C++は今はゲーム開発の書籍が 多いし、速度がいいからおすすめ 本当の意味でスマートにプログラムを書きたいん だと、ゲーム作りは挫折しやすいかも
26.
ちょっと時間が余ったので Kawazの宣伝 僕が所属させていただいているコミュニティです URLは http://www.kawaz.org/
「そんなことよりゲーム作ろうぜ」
27.
質疑応答
28.
詳しくは懇親会で
29.
ご清聴ありがとうございました
Download