1

別々の.mファイルで相互に通信する必要がある2つのCCLayerがあります

  • Level1.m(Level1 CCLayerを使用したCCScene)-タイル化されたマップとプレーヤーのスプライトを保持します
  • HUDLayer.m(Level1.mの上部へのリンク)-すべてのボタンを保持します

HUDLayer.mで次のコードを取得して、Level1.mのプレーヤースプライトと通信するにはどうすればよいですか?

- (void)MoveUpSelected {
        CCMoveTo* moveup = [CCMoveBy actionWithDuration:1  position:ccp(0,-100)];
        CCSequence* sequence = [CCSequence actions: moveup, nil];
        [Player runAction:sequence];
          }

私がこれに何日も立ち往生しているのを手伝ってください。少なくとも誰かが私を正しい方向に向けることができれば。ありがとう!

4

2 に答える 2

1

シーン オブジェクトを使用して、レイヤー間の通信を制御することをお勧めします。HUD プロトコルを作成し、シーンをデリゲートとして設定できます。また、HUD イベントごとに、シーンは適切なレイヤー (メンバーとして格納されている) にアクセスすることによって、それに応じて反応します。

この方法では、このレイヤー カップリングを作成する必要はありません。

于 2013-03-24T08:43:26.187 に答える
0

別のレイヤーにアクセスするには、そのレイヤーへの参照が必要です。それを行うには多くの方法があります。あなたの場合、レイヤーごとに 1 つのプロパティを CCScene クラスに追加するだけです。レイヤーは、親を介してシーンにアクセスできます。

CCLayer* otherLayer = [(YourActualSceneClass*)self.parent otherLayer];

どちらのレイヤーにも他のレイヤーへの参照を保存しないことが非常に重要です。保存する場合は、弱い参照にするか、クリーンアップ メソッドでそれらを nil してください。それ以外の場合は、保持サイクルを作成しました。

他のノードへのアクセスの詳細については、こちらを参照してください。

于 2013-03-23T23:53:14.043 に答える