
私はこれらの問題や他の問題について数ヶ月前に考え始めました。その結果、かなり興味深いゲームが生まれました。
私はタワーディフェンスゲームの大ファンです。 それはすべて、Green TD、Warcraft 3のマップでかなり前に始まりました。その後、 flashtowerdefense.comで多くのゲームを試しました。
アイデア
自分でそのようなゲームを書くのがいいだろうと思ったら。 私は何か変わったものを思いつきたかったのですが、私の友人の一人が言うように、「ロボットはすでにそれにうんざりしています」。 主にこのカテゴリの市場で、ロボット、ゾンビ、神話上の生き物のほぼどこでも、彼に反対することは困難です。 もっと明るく平和なものが欲しかった。 また、ゲームで物理エンジンを使用することに執着しました。まず衝突を処理しやすくし、次に非標準で面白いものを追加しました。

その結果、次のプロットが考案されました。マップ上を歩くモンスターやゾンビの代わりに、ロボットの塔や動物の塔ではなく、木から落ちる果物がありました。 果実の落下軌道は、木と重力で成長する枝によって設定されました。 果物は途中で枝から数回跳ね返り、速度と方向が変わりましたが、動物の塔は倒れたときにそれらを粉砕しなければなりませんでした。
5種類のタワーを作成しました。





Box2d
認めざるを得ない、Box2Dエンジンは私の人生をずっと楽にしてくれた。 彼のおかげで、私はゲーム内で果物の美しい落下、それらの塔による検出、その他の衝突チェックを行いました。 Box2Dがなければ、クマはいません。 物理エンジンを使用した新しいタワーのアイデアがいくつかあります。たとえば、矢印でキツネを枝につなぎ、そのような矢印が果物に当たると、他のタワーが壊れるまでロープにぶら下がっています。 あなたは多くの興味深いことを思いつくことができます。
次に、Box2Dを使用した特定のオブジェクトと、設定する必要があるプロパティについて説明します。
役職 | Box2Dプロパティ | 画像 |
---|---|---|
フルーツ | b2CircleShape
b2_dynamicBody groupIndex = -1 | ![]() |
支店 | b2_staticBody
b2PolygonShape | ![]() |
タワー | b2_staticBody
b2CircleShape isSensor = true | ![]() |
矢印 | b2_dynamicBody
b2PolygonShape isSensor = true | ![]() |
ストーン | b2_dynamicBody
b2CircleShape | ![]() |
壁、床、
天井 | b2_staticBody
b2PolygonShape | ![]() |
b2_staticBodyは、オブジェクトが動かず、重力やその他の力の影響を受けないことを意味します。 これは、塔、枝、および境界線に適用されます。
b2_dynamicBodyは、他のオブジェクトを移動および跳ね返すことができる可動オブジェクトを定義します。 すべての果物と弾丸はb2_dynamicBodyです。
isSensor = trueは、オブジェクトが衝突せず、他のオブジェクトはバウンスせずに通過するため、オブジェクトが存在しないことを意味します。 このようなイベントが発生すると、ライブラリは、果物がタワーの範囲内に収まるか、矢印がリンゴを通過するときに状況に必要なものを知らせます。 すべての果物は同じ負の値groupIndexを持っているので、お互いに衝突することはありませんが、枝や境界でうまく跳ね返ります。
b2CircleShapeオブジェクトは丸く、 b2PolygonShapeは多角形です。私の場合、そのようなオブジェクトはすべて長方形です。
タワーディフェンスにBox2Dを導入することは簡単なことではないことを認めなければなりません。たとえば、Box2Dを使用して凍結タワーを実装する方法を推測する人はいますか? (実際、この質問に対する答えは、物理学の9年生の問題を解決することを必要とし、別の投稿に値します)。 すべてのオブジェクトに適切な物理パラメーターを選択するには、かなりの時間が必要でした。 しかし、最終的にはすべてがうまくいき、自信を持って言うことができます。「タワーディフェンス+ Box2D =はい!」
結果
私は自分のゲームにForest Tower Defenseという名前をつけてアンドロイドマーケットに出しました 。 ご希望の方は無料でダウンロードできます。 ここで、ゲームのスクリーンショットとビデオを見ることができます。 グラフィックスは漫画的であることが判明したため、子供たちもゲームが好きかもしれません。

タワーディフェンスゲームのすべてのファンに試してみることをお勧めします。これは、このジャンルの同様のメカニズムを持つ唯一のゲームだからです。
あなたの意見、改善のヒント、新機能のアイデアを聞いてとても興味があります。
UPD:ゲームの開発はこの記事で説明した原則に従って行われたため、Qtを使用するWindows用のバージョンがあります 。