バックグラウンド
私はゲーム開発を趣味として行っており、それらを設計するより良い方法を探しています。現在、私は標準のOOPアプローチを使用しています(8年間エンタープライズ開発を行ってきたので、最終的には実現しています)。たとえば、「バディ」
public class Baddie:AnimatedSprite //(or StaticSprite if needed, which inherit Sprite)
{
//sprite base will have things like what texture to use,
//what the current position is, the base Update/Draw/GetInput methods, etc..
//an AnimatedSprite contains helpers to animated the player while
//a StaticSprite is just one that will draw whatever texture is there
}
問題
私が2Dプラットフォーマーを作っているとしましょう、そしてバッドがジャンプできるようにする必要があります。通常、私が行うことは、Update / GetInputメソッドに適切なコードを追加することです。その後、プレーヤーにクロール、アヒル、登山などをさせる必要がある場合、コードはそこに行きます。
注意しないと、これらのメソッドが乱雑になるので、このようなメソッドのペアを作成することになります
CheckForJumpAction(Input input)
そして DoJump()
CheckforDuckAction(Input input)
そして DoDuck()
GetInputは次のようになります
public void DoInput(Input input)
{
CheckForJumpAction(input);
CheckForDuckAction(input);
}
更新は次のようになります
public void Update()
{
DoJump();
DoDuck();
}
プレイヤーがジャンプしてアヒルする必要がある別のゲームを作成する場合、通常、機能を備えたゲームに移動してコピーします。乱雑です、分かります。それが私がもっと良いものを探している理由です。
解決?
Blendに要素にアタッチできるビヘイビアがあることは本当に気に入っています。私は自分のゲームで同じコンセプトを使用することを考えてきました。それでは、同じ例を見てみましょう。
基本的なBehaviorオブジェクトを作成します
public class Behavior
{
public void Update()
Public void GetInput()
}
そして、それを使用してビヘイビアを作成できます。JumpBehavior:Behavior
そしてDuckBehavior:Behavior
その後、ビヘイビアのコレクションをSpriteベースに追加し、必要なものを各エンティティに追加できます。
public class Baddie:AnimatedSprite
{
public Baddie()
{
this.behaviors = new Behavior[2];
this.behaviors[0] = new JumpBehavior();
//etc...
}
public void Update()
{
//behaviors.update
}
public GetInput()
{
//behaviors.getinput
}
}
だから今、もし私が多くのゲームでJumpとDuckを使いたいなら、私はただ行動をもたらすことができます。一般的なライブラリも作成できました。
動作しますか?
私が理解できないのは、それらの間で状態を共有する方法です。ジャンプとダックを見ると、どちらも描画中のテクスチャの現在の部分だけでなく、プレイヤーの状態にも影響します。(ジャンプは時間とともに減少する上向きの力を適用しますが、アヒルは動きを止め、バディのテクスチャと衝突サイズを変更します。
どうすればこれを連携させることができますか?動作間に依存関係プロパティを作成する必要がありますか?各動作に親について知ってもらい、直接変更する必要がありますか?考えられたことの1つは、デリゲートを各動作に渡して、トリガーされたときに実行されるようにすることでした。
私が見ている問題はまだまだあると思いますが、全体的な目的は、ゲーム間および同じゲーム内のエンティティ間でこれらの動作を簡単に再利用できるようにすることです。
だから私はあなたにそれを引き渡します。どのように/どのようにこれを行うことができるかを説明することに注意してください もっと良いアイデアはありますか?ぜひ聞きたいです。