我还是比较新的编程,我尝试做的是以下内容:所以我将我的敌人从我的游戏场景分离到另一个班级。在Enemy class.m文件中,我声明了6个方法。每个方法都代表一个新的关卡,可以从游戏场景调用。所以在方法中我声明了精灵的图像,路径,射击粒子类型等。这里是EnemyClass.m文件中1级方法的一个例子:
@implementation EnemyClass
+(void)enemiesLevel1
{
EnemyName = @"enemy1";
SKSpriteNode* enemy = [SKSpriteNode spriteNodeWithImageNamed:EnemyName];
pathSpeed = 3;
CGPathRef path = CGPathCreateWithEllipseInRect(CGRectMake(0,0,400,400), NULL);
SKAction *followTrack = [SKAction followPath:path
asOffset:NO
orientToPath:YES
duration:pathSpeed];
SKAction *forever = [SKAction repeatActionForever:followTrack];
SKAction *addEnemy = [SKAction runBlock:^{
[self addChild: enemy];
}];
SKAction *enemySequence = [SKAction sequence:@[addEnemy, forever]];
[self runAction: enemySequence];
}
然而,Xcode表示两个问题:
No known class method for selector "addChild"
和
No known class method for selector "runAction"
我用GameScene.m调用方法:
[EnemyClass enemiesLevel1]
这里有EnemyClass.h,如果有人想知道:
@interface EnemyClass : NSObject
+(void)enemiesLevel1;
+(void)enemiesLevel2;
+(void)enemiesLevel3;
+(void)enemiesLevel4;
+(void)enemiesLevel5;
+(void)enemiesLevel6;
@end
这可能看起来像一个愚蠢的问题,但我仍然是新的,我将非常感谢任何帮助! 顺便说一句:我确实导入了sprite kit框架。
答案 0 :(得分:0)
您的EnemyClass
没有addChild
或runAction
方法,因为它不会从SKNode
或SKNode
的子类继承。
改变:
@interface EnemyClass : NSObject
到
@interface EnemyClass : SKNode
更新:
此外,您已将enemiesLevel1
等定义为类方法。如果你打算用它们起诉addChild,它们需要是实例方法。
这是一个可能对您有所帮助的问题:
What is the difference between class and instance methods?
请务必阅读所有答案,因为其中一些答案应该有您应该注意的好信息。
答案 1 :(得分:0)
更改
+(void)enemiesLevel1
{
....
}
到
-(void)enemiesLevel1
{
....
}
方法前面的+表示它是一个类方法, - 表示它是一个实例方法。无法从类方法调用实例方法。请阅读为您提供的链接原型,以便您更好地了解它们之间的差异。