2011-10-24 10 views
1

現在の状態を適切な変数に格納することによって、異なるゲーム状態を切り替えることができるgamestate技法を実装しようとするのが難しいです。Objective Cの仮想ボイドと同等のもの - gamestate技法での使用

現在の状態に設定されているNSObject * currentStateを作成しましたが、[currentStateメソッド]にメッセージを送信しようとすると、「応答しない可能性があります」というエラーメッセージが表示されます。 (NSObject型のため)。

また、Gamestateというスーパークラステンプレートを作成してみました。また、gamestateを継承しながら個々のgamestatesを作成しました。しかし、gamestateオブジェクト内にメソッドが実装されていないという事実に関する別のエラーメッセージがあります(これは、サブオブジェクトにメソッドを実装したいだけです)。

プロトコルが私に役立つかどうかはわかりません。エラーメッセージなしでgamestateを実装する方法に関する提案はありますか?事前に

おかげで;)

答えて

0

Creating an abstract class in Objective Cを見てください。

の代わりにid currentStateを宣言すると、[currentState method]に対して「応答しない可能性があります」という警告が表示されません。

+0

おかげで、IDを追加するとエラーメッセージが削除されました。最初に* currentStateから '*'を削除するのを忘れてしまったのですが、なぜIDがポインタ型を受け入れないのかを知る必要があります。もう一度ありがとう;) – eJm

+0

'id'はポインタなので、' * 'は必要ありません。単に 'id'を' NSObject * 'のように考えるがエラーチェックは少ない。 –

0

GameStatesが共通のコードを共有していない場合(または別の方法で共有できる場合)、抽象クラスを使用するか、プロトコルを使用します。つまり、抽象クラスを作成し、すべてのメソッドが抽象クラスであり、クラス内にコードがなく、宣言だけであれば、プロトコルはおそらくあなたがやっていることに適しています。

+0

morningstarさん、ありがとうございました。私はプロトコルを使うことを考えましたが、クラス内で必要なメソッドを実装するように努めています。プロトコルは、主に、特定のメソッドを実装することを忘れないようにするためのものですか?乾杯:) – eJm

+0

あなたは常にプロトコルの代わりに裸のid変数を使用することができます。プロトコルはあなたの言うとおりです。それは、変数に強く型付けされるので、適切なオブジェクトをその中に入れなければなりません。コンパイル時に実行時に「認識できないセレクタ」を取得しないことを確認することができます。 – morningstar

関連する問題