私はクラス Pawn を持っています。これはゲーム内のすべての「キャラクター」の基本クラスであり、健康などのプロパティを持ち、移動したり、死んだり、話したりすることができます。これを拡張するクラスの 1 つが「Boy」クラスです。「Boy」クラスは、このゲームでプレイヤーが操作するキャラクターです。
キャラクターの「状態」を制御するために、状態クラスが作成されます。これらには、onEnterState、onStateTick、onLeaveState などのメソッドがあります。状態は、しゃがむ、歩く、ジャンプすることを表すために使用される場合があり、「keyPressed」「<-」などのメッセージを送信して、選択したとおりに処理または無視します。
私の問題は、私の基本「状態」クラスに次のようなメソッドがあることです。
function onEnter ( pawn:Pawn ) :void;
function onLeave ( pawn:Pawn ) :void;
function onGameTick ( pawn:Pawn ) :void;
function onAnimEnd ( pawn:Pawn ) :void;
ご覧のとおり、これは実際にはインターフェイスですが、ActionScript3 が抽象クラスをあまり好まないことが明らかになるまで、最初に基本クラスを試しました。
とにかく、クラス「BoyJumpState」は明らかにこのクラス/インターフェイスを拡張/実装して、対話用のパブリックメソッドが存在することを確認する必要がありますが、これは、ActionScript では拡張できないという事実によって妨げられています。 :
public override function onEnter ( boy:Boy) :void { trace("Hey"); }
これは設計図と一致しない (つまり、ポーンを受け入れない) ため、コンパイル時に拒否されます。ただし、そのクラスに固有のメソッドをメソッド本体で利用する必要があるため、Boy を受け入れるにはそれが必要です。
元のインターフェイスが問題であり、代わりにパラメーターがポーンを拡張する必要があり、実際にはポーンである必要はないことを指定する必要があると考えていますが、ActionScript でこれを実装する方法は見当たりません。
...または、完全に間違った方向に進んでいる可能性もあります。その場合は、アドバイスをいただければ幸いです。
継承を行うことができなかったことに気づきましたが、私が作成しているゲームは、私が慣れ親しんでいるものよりも大規模であるため、オブジェクト指向プログラミングの実践に近いものです。しかし、私は自分の快適な言語 (Java) から離れてしまい、ここで何をすべきかについて本当に自分を超えています。
どんな助けでも感謝します、ありがとう。