1

私は、cocos2d Scene のサブクラスである GameScene というクラスを持っています。

そこには2つのレイヤーがあります。ゲームレイヤーとコントロールレイヤー。ControlsLayer が GameLayer 内で何かを移動できるようにしたいことは、おそらくすでにおわかりでしょう。正確には、ControlsLayer から GameLayer の cPBody を制御しようとしています。

現時点では、ControlsLayer から命令をルーティングし、GameScene に戻してから、GameLayer に戻そうとしています。それが理にかなっていれば。とにかく、私はそれを機能させることができません。私は PHP のバックグラウンドを持っているので、PHP の経験を Obj-C に間違って適用していると思います。

私の考えでは、次のようなものを使用してクラス/オブジェクト内のプロパティにアクセスできるはずです

aThing *someThing = someInstance->aThing;

私が見てきたサンプルコードから、これはうまくいくように見えます。しかし、そうではありません。可能な限り削除されたコードは次のとおりですhttp://pastebin.com/d49c9d0be

この特定の問題を解決する方法を知るよりも、問題は、何がわからないのかということです。

4

3 に答える 3

3

Objective-C では、インスタンス変数を取得するためのアクセサ メソッドを定義する必要があります。同じクラス タイプから呼び出さない限り、そのように直接アクセスすることはできません (たとえば、NSCopying プロトコルを実装していて必要な場合)。プライベート変数を設定しますが、今は心配しないでください)。

これを行う最も簡単な方法は、 を使用してヘッダーでプロパティを定義し、実装@property(retain) SomeClass *name;を配置して Objective-C に生成させること@synthesize name = instanceVariable;です。object.name;その後、または[object name];を使用して、そのクラスの外部にある変数にアクセスできます。詳細については、プロパティとオブジェクト指向プログラミングのドキュメントを参照してください。

于 2009-03-30T17:07:34.170 に答える
1

gameLayer.myBody プロパティをどのような形でも公開していません。@property 宣言を使用する必要があります (objective-c 2.0 を想定) (ここにを示します)。

私は PHP のバックグラウンドを持っていないので、PHP でどのように違うのかわかりません。

于 2009-03-30T17:08:00.330 に答える
1

オブジェクトのプロパティにアクセスする正しい方法は次のとおりです。

aThing * someThing = someInstance.aThing; // new style

また

aThing * someThing = [someInstance aThing]; // old style

c でコーディングしている場合、->演算子は理にかなっています。ただし、objective-c では、オブジェクトは常にポインターを介して渡されます。object-c 変数は実際にオブジェクトを保持することはなく、オブジェクトへのポインターを保持するだけです。言語設計者は単に[]or.構文を使用してメンバーにアクセスすることを決定したので、それを行う必要があります。

于 2009-03-30T17:10:20.513 に答える