我需要调用一个类方法来运行Cocos2D场景。我有一个游戏控制器,我将在其中传递不同的状态(或熟悉Cocos2D的那些层)。请参阅以下代码:
-(void)startGameWithState:(Class)s {
[[CCDirector sharedDirector] runWithScene: [s scene]];
}
问题是,这工作正常,但会产生以下警告:
No '+scene' method found
尽可能地,我想避免发出警告,以便如何解决这个问题?
更新:这就是我所做的。
-(void)changeStateTo:(Class <GameState>)s {
[[CCDirector sharedDirector] runWithScene: [s scene]];
}
通过让GameState协议定义+场景方法,我不会收到任何警告。
答案 0 :(得分:2)
基本上,只需使用scene
类方法声明协议或抽象类,以便编译器知道它存在。
答案 1 :(得分:0)
它告诉您,您的通用类型 - Class
- 没有名为scene
的方法。如果你在州/层中传递,那些必须是某些实际的类,对吧?您需要告诉编译器实际上是什么类s
,以便它可以在其中找到scene
方法。
答案 2 :(得分:-2)
如果你总是传递具体的类写
-(void)startGameWithState:(ConcreteClass*)s
如果您将使用不同的类而不使用任何层次结构,请使用id来避免警告
-(void)startGameWithState:(id)s
第二种方法不是很好,因为如果你将错误的类对象传递给这个方法,你将会遇到运行时错误。但是在编译状态下一切都会好起来
如果您知道传递的每个类都将使用+(id) scene
方法从某个基类派生,那么传递基类:
-(void)startGameWithState:(BaseClass*)s