プロトコルを実装するすべてのクラスが、トリガーされたプロトコル メソッドに基づいてアクションを実行するように変更されるように、デリゲートを実装する方法を理解するのに助けが必要です。
すべての入力を処理して状態を渡す InputHandler クラス (CCNode サブクラス) があります (例: FIRE、STOP、MOVE_LEFT、MOVE_RIGHT など)。この InputHandler クラスには、プレイヤーが触れる UI コントロールに基づいてトリガーされるいくつかのメソッドを持つ Protocol があります。
問題は、現在、このプロトコルを実装してカスタム アクションを実行する 2 つの GameObjs がありますが、一方の GameObject だけがそのアクションをトリガーし、もう一方の GameObj クラスがそのアクションを実行していないことです。
2 番目のクラスにコメントするとcontroller.delegate = secondGameObj;
、最初の gameObj は、デリゲートがプロトコル メソッドをトリガーしたときに想定どおりにアクションを実行します。
//InputHandler Class
@protocol InputHandlerDelegate <NSObject>
@optional
- (void)onPress;
- (void)onMove: (ControllerAction)state_;
- (void)onRelease;
@end
@class InputHandler: CCNode<CCTouchOneByOneDelegate>
@property (assign, nonatomic) id<InputHandlerDelegate> delegate;
//.....more InputHandler class details...
@end
//Implementation of game objects and assigning(registering) to the controller's delegate
InputHandler *controller = [InputHandler node];
[self addChild: controller];
GameObject1 *gameObj1 = [GameObject1 node];
[self addChild: gameObj1];
controller.delegate = gameObj1; //does not trigger, unless I comment out gameObj2
GameObject2 *gameObj2 = [GameObject2 node];
[self addChild: gameObj2];
controller.delegate = gameObj2; //this game obj triggers protocol custom methods