我需要一些帮助来理解如何实现委托,以便所有实现协议的类都会根据触发的协议方法进行更改以执行其操作。
我有一个 InputHandler 类(CCNode 子类),它处理所有输入并传递状态(例如:FIRE、STOP、MOVE_LEFT、MOVE_RIGHT 等)。这个 InputHandler 类有一个协议,它有一些基于玩家触摸的 UI 控件触发的方法。
问题是现在我有两个 GameObj 实现了这个协议并执行了它的自定义动作,但是只有一个 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