通常我会像平常一样设置我的代表:
@interface CAKGameViewController : UIViewController <CAKGameSceneDelegate>
然后使用
跟进CAKGameScene.h@protocol CAKGameSceneDelegate;
@interface CAKGameScene : SKScene <SKPhysicsContactDelegate>
...(properties, etc)
@protocol CAKGameSceneDelegate <NSObject>
@optional
- (void)getStarted;
@end
但是,正如我们大多数人所知道的那样,你必须像这样设置商店:
@property (nonatomic, weak, readwrite) id<CAKGameSceneDelegate> myDelegate;
我的问题是,我想使用实际的SKSceneDelegate(self.delegate,而不是(self.myDelegate)并且像这样:
@interface CAKGameViewController : UIViewController <SKSceneDelegate>
现在这很好,我可以使用self.delegate来引用控制器,但问题是我似乎无法弄清楚如何自定义CAKGameViewController,即进一步设置协议,或自定义协议,对于我的方法和/或属性。 :(
任何帮助都会有所帮助。
由于
答案 0 :(得分:0)
我终于找到了一个合适的解决方法来使用和分配SKScene委托。诀窍是施放(当然是正确的)!?
您可以连接GameViewController并符合协议
在CAKGameViewController.h
中@interface CAKGameViewController : UIViewController
<SKSceneDelegate, CAKGameSceneDelegate>
在CAKGameScene.h中
@protocol CAKGameSceneDelegate <NSObject>
// any @property;
// or - (void)methods;
@end
在CAKGameViewController.m中,您使用self分配代理:
self.scene.delegate = self; //this is the Apple delegate property
然后每当你想使用
something = self.delegate.property; // <or>
[self.delegate method]; // from the CAKGameSceneDelegate protocol
你投了
something = ((id<CAKGameSceneDelegate>)self.delegate).property; // <or>
[((id<CAKGameSceneDelegate>)self.delegate) method]; // from non-apple protocol
我所做的只是制作#define
#define delegateHelper ((id<CAKGameSceneDelegate>)self.delegate)
然后我可以:
something = delegateHelper.property;
[delegateHelper method];
我只想知道你是否会像大多数cocoa / objective-c对象一样拥有一个名为delegate的属性,为了使事情有效,委托应该是委托,你不应该使用myDelegate,或者某些东西愚蠢。 delegateHelper可能不会好多少,但对我来说,我可以忍受这种解决方法。
答案 1 :(得分:0)
您可以在协议定义中扩展原始委托:
@protocol CAKGameSceneDelegate <SKSceneDelegate>
//extend SKSceneDelegate with new functions here
@end
或者在Swift中:
protocol CAKGameSceneDelegate: SKSceneDelegate
{
//extend SKSceneDelegate with new functions here
}
如果您这样做,则无需重新定义delegate
。