Suche senden
Hochladen
I phone勉強会 2010_03_06_gameloop
•
3 gefällt mir
•
702 views
Tomohiko Okita
Folgen
西東京iPhone勉強会で発表した遺産です
Weniger lesen
Mehr lesen
Diashow-Anzeige
Melden
Teilen
Diashow-Anzeige
Melden
Teilen
1 von 76
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
セーラーソン振り返り
セーラーソン振り返り
Masafumi Terazono
FACULTY AND STAFF DEVELOPMENT
FACULTY AND STAFF DEVELOPMENT
djhune
Hurdles for the india a case study
Hurdles for the india a case study
DGMS, Ministry of Labour & Employment, New Delhi
Saitama beginner tips50
Saitama beginner tips50
Tomohiko Okita
第3回yidev coding guideline読み
第3回yidev coding guideline読み
Tomohiko Okita
Pillar design
Pillar design
DGMS, Ministry of Labour & Employment, New Delhi
Bba.nshm durgapur 2012
Bba.nshm durgapur 2012
NCMT Durgapur
Stonehaven Energy Resources
Stonehaven Energy Resources
dsangster
Empfohlen
セーラーソン振り返り
セーラーソン振り返り
Masafumi Terazono
FACULTY AND STAFF DEVELOPMENT
FACULTY AND STAFF DEVELOPMENT
djhune
Hurdles for the india a case study
Hurdles for the india a case study
DGMS, Ministry of Labour & Employment, New Delhi
Saitama beginner tips50
Saitama beginner tips50
Tomohiko Okita
第3回yidev coding guideline読み
第3回yidev coding guideline読み
Tomohiko Okita
Pillar design
Pillar design
DGMS, Ministry of Labour & Employment, New Delhi
Bba.nshm durgapur 2012
Bba.nshm durgapur 2012
NCMT Durgapur
Stonehaven Energy Resources
Stonehaven Energy Resources
dsangster
Energy management
Energy management
DGMS, Ministry of Labour & Employment, New Delhi
Wtidev 0430 tmoktia
Wtidev 0430 tmoktia
Tomohiko Okita
Cocos2dx 8hour
Cocos2dx 8hour
Tomohiko Okita
Wtidev0227 tmokita
Wtidev0227 tmokita
Tomohiko Okita
Marteokiko
Marteokiko
francisco.67.09.15
Team building a case study
Team building a case study
DGMS, Ministry of Labour & Employment, New Delhi
Design of super elevation :- A case study
Design of super elevation :- A case study
DGMS, Ministry of Labour & Employment, New Delhi
Extraction of developed pillars by opencast mine: acase study
Extraction of developed pillars by opencast mine: acase study
DGMS, Ministry of Labour & Employment, New Delhi
Highwall mining – a new approach in india
Highwall mining – a new approach in india
DGMS, Ministry of Labour & Employment, New Delhi
New approch towards support desugn
New approch towards support desugn
DGMS, Ministry of Labour & Employment, New Delhi
Pillar design
Pillar design
DGMS, Ministry of Labour & Employment, New Delhi
Weitere ähnliche Inhalte
Andere mochten auch
Energy management
Energy management
DGMS, Ministry of Labour & Employment, New Delhi
Wtidev 0430 tmoktia
Wtidev 0430 tmoktia
Tomohiko Okita
Cocos2dx 8hour
Cocos2dx 8hour
Tomohiko Okita
Wtidev0227 tmokita
Wtidev0227 tmokita
Tomohiko Okita
Marteokiko
Marteokiko
francisco.67.09.15
Team building a case study
Team building a case study
DGMS, Ministry of Labour & Employment, New Delhi
Design of super elevation :- A case study
Design of super elevation :- A case study
DGMS, Ministry of Labour & Employment, New Delhi
Extraction of developed pillars by opencast mine: acase study
Extraction of developed pillars by opencast mine: acase study
DGMS, Ministry of Labour & Employment, New Delhi
Highwall mining – a new approach in india
Highwall mining – a new approach in india
DGMS, Ministry of Labour & Employment, New Delhi
New approch towards support desugn
New approch towards support desugn
DGMS, Ministry of Labour & Employment, New Delhi
Pillar design
Pillar design
DGMS, Ministry of Labour & Employment, New Delhi
Andere mochten auch
(11)
Energy management
Energy management
Wtidev 0430 tmoktia
Wtidev 0430 tmoktia
Cocos2dx 8hour
Cocos2dx 8hour
Wtidev0227 tmokita
Wtidev0227 tmokita
Marteokiko
Marteokiko
Team building a case study
Team building a case study
Design of super elevation :- A case study
Design of super elevation :- A case study
Extraction of developed pillars by opencast mine: acase study
Extraction of developed pillars by opencast mine: acase study
Highwall mining – a new approach in india
Highwall mining – a new approach in india
New approch towards support desugn
New approch towards support desugn
Pillar design
Pillar design
I phone勉強会 2010_03_06_gameloop
1.
ゲームループの
つくりかた 沖田@tmokita 12年11月17日土曜日
2.
おわび
• いまさらな内容かもしれませんし iPhone固有というところはあまりないです。 ごめんなさい。 • ゲーム作りのきっかけになれば と思って発表することにしました。 その程度です、ごめんなさい。 12年11月17日土曜日
3.
おねがい
• 発表の途中でも ・よくわからねぇぞ!《゚Д゚》ゴラァア!! とか ・細かく説明しろ!《゚Д゚》ゴラァア!! とかあったら 随時お気軽にお願いします。 • つっこんでもらったほうが安心します。 12年11月17日土曜日
4.
自己 12年11月17日土曜日
紹介
5.
沖田
知彦 @ tmokita 12年11月17日土曜日
6.
本業 12年11月17日土曜日
7.
零細ゲーム
デベロッパ 所属 iPhone案件はじめました 12年11月17日土曜日
8.
しかし 12年11月17日土曜日
9.
不況 12年11月17日土曜日
10.
なので 12年11月17日土曜日
11.
副業 12年11月17日土曜日
12.
iPhone プログラマ 12年11月17日土曜日
13.
関わった
アプリ 12年11月17日土曜日
14.
その他はひみつ 12年11月17日土曜日
15.
あらためて 12年11月17日土曜日
16.
ゲームループの
つくりかた (初級編) 12年11月17日土曜日
17.
目次
• はじめに • 業界用語 • 基本ループの考えかた • Sceneとかなんとか • おまけ 12年11月17日土曜日
18.
はじめに
• ゲームの作り方を 難しく考えすぎている 人が多い 12年11月17日土曜日
19.
12年11月17日土曜日
が!
20.
• 実はたいしたことはやっていません
ごめんなさい 12年11月17日土曜日
21.
とりあえ
ず知っと け的な物 12年11月17日土曜日
22.
業界用語
• リソース(音とか絵とかバイナリとか、データそのもの) • レイヤー(大きい単位での描画優先順位) • プライオリティ(小さい単位での描画優先順位) • BG(背景) • スプライト、オブジェ(細かく動くやつ) • フレーム(FPS:フレーム/Sec 60FPS=秒間60回画面更新) • シーン、モード(各画面) 12年11月17日土曜日
23.
リソース(Resource)
• リソースマネージャがあると便利 • 無駄な重複読み込みを防ぐ • 最適なリソース配置 • 非同期ロードなどの処理 12年11月17日土曜日
24.
レイヤー(Layer)
• 描画順番を大きく区切るための構造 • フォトショップのレイヤーとか 奥 手前 12年11月17日土曜日
25.
プライオリティ
• 同じレイヤー内での描画順番 Layer Layer > < 12年11月17日土曜日
26.
都合により発表時とは画像
BG,スプライト を変えてあります BG スプライト (オブジェ) 12年11月17日土曜日
27.
以上を
ふまえて 12年11月17日土曜日
28.
ループの
話 12年11月17日土曜日
29.
ゲームの
基本は無 限ループ 12年11月17日土曜日
30.
基本ループ 1
• int main() { GameInitialize(); whlie( isGameFinish() ) { GameMainLoop(); } GameFinalize(); } 12年11月17日土曜日
31.
iPhoneの
場合はタ イマーで 12年11月17日土曜日
32.
基本ループ 2
• applicationDidFinishLaunching { GameInitialize(); SetTimer(1.f/60.f); } • OnTimer { GameMainLoop(); } • applicationWillTerminate { GameFinalize(); } 12年11月17日土曜日
33.
ソースコ
ードは壊 滅的 12年11月17日土曜日
34.
でも
書きます 12年11月17日土曜日
35.
そして
シーン 12年11月17日土曜日
36.
これが
今日の 12年11月17日土曜日 メイン
37.
Scene
• Webでいうところの各ページ • 各画面をSceneとして作り最後に接続する • ex.) タイトル画面 ゲームメイン エンディング 12年11月17日土曜日
38.
シーンのイメージ
(あくまでもイメージ) 都合により発表時とは画像 を変えてあります タイトル画面 ゲームプレイ画面 エンディング Title GameMain Ending 12年11月17日土曜日
39.
各シー
ンのつ 12年11月17日土曜日 くり方
40.
Pattern 1
• Switch−Caseでの分岐 while(1) { switch(nScene) { case kSceneTitle: funcTitleScene(); break; case kSceneGameMain: funcGameMainScene(); break; case kSceneEnding: funcEndingScene(); break; } } 12年11月17日土曜日
41.
Pattern 2
• 関数ポインタにする • typedef void (*SceneFunc)(void*); SceneFunc funcScenes[] = { funcTitleScene, funcGameMainScene, funcEndingScene }; • while(1) { funcScenes[nScene](&arg); } 12年11月17日土曜日
42.
Pattern 3
• 仮想関数にする • CSceneBase sceneArray[] = { TitleClass, GameMainClass, EndingClass, }; • while(1) { CSceneBase* currentScene = getCurrentScene(); currentScene->exec(); } 12年11月17日土曜日
43.
• 基本的なループはこんなかんじ 12年11月17日土曜日
44.
ため 12年11月17日土曜日
しに
45.
• スプライトを一つ保持して
描画するシーンを考える • Class SceneOne { CSprite* sprite; } 12年11月17日土曜日
46.
必要な処理を考える
•Initialize - 初期化 • Main - 毎フレーム呼ばれる • Finalize - 終了処理 12年11月17日土曜日
47.
書いてみる
• Scene::Initialize { sprite = [[CSprite alloc] initWithData:@”texture.png”]; } • Scene::Main() { [sprite updateParameter]; [sprite draw]; } • Scene::Finalize() { [sprite release]; } 12年11月17日土曜日
48.
できた 12年11月17日土曜日
49.
しかし 12年11月17日土曜日
50.
あれれのれ?
• 非同期ロードは? →「NowLoading」とかは? • ん?描画ってこれでいいの? 12年11月17日土曜日
51.
• リソースのロードは非同期に行う
そのため 「ロード要求」と 「ロードしたデータのセット」 は段階をわけて行う必要がある • レイヤーやプライオリティを考慮したり 高速化のためには 描画はまとめて一気に行うほうが都合がよい 12年11月17日土曜日
52.
もういちど考える
• Initialize - 初期化 •Loading - リソースのロード中 •PreMain - ロード後メインループ前に一回 • Main - 毎フレーム呼ばれる処理 • Draw - 描画処理 • Finalize - 終了処理 12年11月17日土曜日
53.
も一回書いてみる(1)
• Scene::Initialize { sprite = [[CSprite alloc] init]; [ResourceManage requestLoad_SpriteData]; } • Scene::Loading() { [GameSystem requestDraw_NowLoading]; } • Scene::PreMain() { data = [ResourceManage getLoadedSpriteData()]; [sprite setData:data]; [sprite setLayer:LAYER_0]; [sprite setPriority:100]; } 12年11月17日土曜日
54.
も一回書いてみる(2)
• Scene::Main { [sprite updateParameter]; } • Scene::Draw { [GameSystem requestDraw:sprite]; } • Scene::Finalize() { [sprite release]; } 12年11月17日土曜日
55.
できた! 12年11月17日土曜日
56.
シーン完成!
• 一つのSceneは基本的にこんなかんじ 12年11月17日土曜日
57.
そして 12年11月17日土曜日
58.
接続 12年11月17日土曜日
59.
Sceneの接続
• Sceneをつなぐ 1 現在実行中のシーンの終了 2 次のシーンの初期化 12年11月17日土曜日
60.
while(1){
CSceneBase* curentScene = getCurrentScene(); // 初期化 if( [curentScene isNotInitialize] ) [curentScene Initialize]; //ロード中 if( [ResourceManager isLoading] ) [curentScene Loading]; // ロード完了後に一回だけ if( [ResourceManager isLoadFinish] ) [currentScene PreMain]; // Loading中にMain、Drawを呼ぶかはご自由に [currentScene Main]; [currentScene Draw]; // シーンのDrawでRequestされたものをレイヤーとプライオリティを考慮して描画 [GameSystem DrawRequestedObject]; if( [SceneManager isRequestChange] ) { [currentScene Finalize]; [SceneManager setNextScene: getRequestedScene()]; } } 12年11月17日土曜日
61.
ソースコ
ードは壊 滅的 12年11月17日土曜日
62.
Tips
• Scene選択できるSceneを作っておく • できるだけScene単体で動くように しておく • →分業&デバッグが楽 12年11月17日土曜日
63.
まとめ 12年11月17日土曜日
64.
まとめ
• つまりはゲーム用の 「便利なタスク」 • ゲーム用として Loading、Draw、を考慮 • 仕組みを理解すれば 各描画パーツに応用可能 12年11月17日土曜日
65.
おまけ 12年11月17日土曜日
66.
お! 12年11月17日土曜日
67.
こいつ 12年11月17日土曜日
68.
できるな! 12年11月17日土曜日
69.
と思わせる小ワザ
• メモリプールをつくる(実は大技) • 構造体は無駄なく並べる • 2の累乗の剰余は&でマスク • 2の累乗を掛ける(割る)ときはシフト • キー入力のバリエーションをつくる 12年11月17日土曜日
70.
キー入力
• Normal - 押している間だけOn • Repeat - 押した瞬間と一定時間後にOn • Trig - 押した瞬間だけOn • EndTrig - 離した瞬間だけOn 12年11月17日土曜日
71.
これで 12年11月17日土曜日
72.
できるね! 12年11月17日土曜日
73.
やったね! 12年11月17日土曜日
74.
おめでとう! 12年11月17日土曜日
75.
あ り が
と う ございました 12年11月17日土曜日
76.
• いずれどこかで中級編を・・・
• tmokita@gmail.com • Twitter : tmokita 12年11月17日土曜日
Jetzt herunterladen