IrrlichtでSTGを最初からみんなで作るスレに挑戦

Since 2005/03/20

STGを最初からみんなで作るスレ(2ch)とはスレで出される課題をこなしていくスレです。

STGを最初からみんなで作るスレ (gamdevWiki)にいままでの課題がまとまっています。

GamDevPukiWiki - 段階的学習!(gamdevWiki)の一環らしいです。

 

Level 01

 

Level1 自機を表示する

自機を表示させましょう。

 

 

Irrlichtのインストールも問題なく完了。でもIrrlicht.dllの添付を忘れてうぷしてしまった。

スタティックリンクしたほうがファイル数が減っていいのになぜDLLなんだろう。

バージョン間の互換性もないし。

level01.zip

 

 

Level 02

 

Level2 キー入力を作る

キー入力(ジョイスティック入力)されたら自機が動くようにしましょう。

 

 

キー入力を拾うようなサンプルがほとんどみあたらない。

入門記事によるとFPSスタイルのゲームだとキー入力は書かなくてもいいらしい。

level02.zip

 

 

Level 03

 

Level3 画面からはみ出ないようにする

自機が画面からはみ出ないようにしましょう。

 

 

これは簡単。

XとYが範囲外にならないようにしました。

level03.zip

 

 

Level 04

 

Level4 弾を出す

1発で良いのでショットボタンを押したら弾が出るようにしましょう。

 

 

弾の座標を変数に記憶し毎フレームごとに座標を1づつ引いていく。

弾が生きてるかどうかのフラグも用意するべきなんだろうけどマイナスにすることで代用。

ボタンを押した時の判定がすっきりしないけどサンプルもすっきりてないのでよしとします。

スレで指摘された2つ以上のキーを完全に同時押しされたときの不具合が何のことかわからないので調査中。

level04.zip

 

 

Level 05

 

Level5 敵を作る

1匹で良いので敵を出現させましょう。まずは上から下まで直進するタイプでいいかな。

画面下にはみ出たらまた上から出現。

 

 

やることは弾と同じ。

敵画像のある座標を確認するのが面倒だった。

level05.zip

 

 

Level 06-10

 

Level6 敵と弾の当たり判定を作る

自機ショットと敵の当たり判定をつけましょう。敵が死んだら爆発させて、すぐ別の場所に出現させればオケー。点数を入れるようにするといいかも。爆発処理がなんだかんだ最初の難関。

Level7 自機と敵の当たり判定を作る

自機と敵の当たり判定をつけましょう。ゲージ製にする人は体力値の表示(最初は数値でも可)、残機制にする人は自機の爆発をさせてみましょう。体力値、残機が0になったらゲームオーバーになります。

Level8 敵の攻撃を作る

敵が一定時間ごとに弾を撃ってくるようにしましょう。最初は真下だけでもいいかな。数学関数が解る人は自機に向かって撃たせましょう。当たり判定はもう習得しているのでここでやってしまいましょう。

Level9 弾の数を増やす

自機のショット数を増やしましょう。ただし、あまり増やしすぎると当たり判定処理のループ回数が増えすぎて重たくなるので注意。

Level10 敵の出現数を増やす

敵の出現数を増やしましょう。敵の種類を増やしたい人はここで。データに「敵番号」というのを持たせて処理を振り分ける。

 

 

似たような処理なので一気にやっつけました。敵や弾などの管理にSTLのlistを使ってますが種類ごとに用意したこともあって冗長なソースになってしまいました。局所的には見やすいのですが長すぎるのが欠点。リスト1本にまとめたほうが短くなるのですが当たり判定処理などで関係ないオブジェクトまで判定することになって処理量が増えていき処理落ちしたので断念。

level10.zip

 

 

Level 11-12

 

Level11 移動アルゴリズムを作る

敵機の動作パターンを増やそう。

Level12 敵機を連携させる

複数の敵機を連携させよう。(多関節を作ろう)

 

 

多関節むずかしい。関節の途中を破壊すると無効なポインタを参照するオブジェクトができてしまい暴走してしまった。想定の範囲内だったのですぐ気づいたけど、じゃあどうするかで迷った。ランダムに移動する、慣性のまま放り出される、誘爆するなど数パターン考えた。今回はまるでミミズのように別れた体にも脳みそが生まれるようにした。どんな内容のプログラムかというと移動アルゴリズムを2つ用意してキャラクタの状態によって切り替えている。1つは先頭にいる場合、もう一つは先頭ではない場合。先頭にいる場合はプレイヤーを追いかける。先頭でない場合は1つ前のキャラクタを追いかける。オブジェクトの生成時に1つ前のキャラクタのポインタをコンストラクタの引数で与えている。

Level12

 

 

FPS調整

 

N/A

 

 

環境によって速度が一定してないらしいので調整しました。やり方の候補は大きくわけて2種類。

・1フレームにかかった時間に応じて移動量を変動させる方法。

 PCの能力に応じた描画処理が行える

 結果がPCの能力に応じて変化する

・1フレームにかかる時間を固定、移動量を固定。

 一定能力以下のPCで処理落ち

 毎回同じ結果が得られる(速度除く)

それぞれ利点欠点がありさらにその欠点をフォローする方法もあるが今回は1フレームにかかる時間を固定(正確にいうと1フレームにかかる時間の最小を引き上げた)

理由はすでに作ってしまった部分に追加しやすく実装が簡単だから。それに処理落ちとフレームスキップを比べた場合、前者のほうがプレイに支障がないという個人的な事情が大きい。

level12a.zip

 

 

 

 

リンク

 

ゲーム製作技術@2ch掲示板

http://pc8.2ch.net/gamedev/

ここがなくちゃ始まりません!ゲームを作っている人が集まる掲示板としては世界最大級。毎週数本はどこかでゲームがアップロードされ最新のニュースへリンクが貼られ、または製作チームの運営理論をまとめようと活発が議論がなされています。

GamDevPukiWiki

http://gamdev.org/w/

ゲーム製作プロジェクトのまとめページや言語やツール、ライブラリなどのまとめページ、海外技術記事の和訳などがあります。リンク集などは漠然とググってるだけでは絶対に出てこないようなサイトもあり勉強になります。自宅鯖の無料提供らしいです。アクセスが集中するとしばしばダウンします。ハードウェア障害のせいらしい。最近は落ちる頻度が減ってます。

ゲムデヴあぷろだ

http://gamdev.org/up/


ゲーム開発関係のアップローダ。最大10MByteまでアップロードできるが速度がやや遅め。 しかし、基本的に削除されないので長く残しておきたい場合に便利。おかげで昔の人が作ったソースがいまだに残っていて重宝します。

ゲ製作技術板予備wiki

http://f54.aaa.livedoor.jp/~gamedev/

ゲーム製作技術板専用のwikiです。基本的にはGamDevPukiWikiがダウンしているときに使われるようです。こちらにしかない内容もあり単純なミラーサイトというわけではありません。

予備ロダ

http://gamdev.hp.infoseek.co.jp/

ゲーム製作技術板専用のアップローダです。こちらは予備という名前に反して常時使われています。転送速度が速く快適。

アマゲニュース

http://amagame.blog12.fc2.com/

http://www.doblog.com/weblog/myblog/4913

ほぼ毎日ゲームの開発環境や3DCGツール、ゲーム製作技術板のニュースなどを配信しています。


Irrlicht Engine

http://irrlicht.sourceforge.net/

リアルタイム3Dエンジン。2Dも扱えます。グラフィックの描画やゲーム製作を楽にしてくれます。

Irrlicht A GoGo

http://www.zgock-lab.net/irrlicht/

ゲームエンジンIrrlichtの入門サイト。インストールからマップ製作ツールの使い方まで幅広く扱っています。基本的に3Dゲーム向け。

Irrlicht Unofficial Docs

http://www.realintegrity.net/~irr/

イルリヒトオフィシャルサイトのチュートリアルやニュースなどの記事を翻訳するサイト。wikiで運営されており誰でも翻訳に参加できます。

Electrical Fireworks

http://www-fu.magma.ne.jp/~hayase/

DirectXのライブラリです。Delphiを使っていたときに利用してました。

Delphiゲーム製作講座

http://delphi.nce.buttobi.net/

メインルーチンの作り方とQuadrupleDの使い方があります。