Ios 从游戏场景中调用我的敌人类方法

Ios 从游戏场景中调用我的敌人类方法,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,我对编程还是相当陌生的,我尝试做的是:所以我把我的敌人从游戏场景中分离出来,放到另一个类中。在敌方class.m文件中,我声明了6个方法。每个方法都代表一个新的级别,将从游戏场景中调用。因此,在方法中,我声明精灵的图像、路径、拍摄粒子类型等。。下面是EnemyClass.m文件中级别1方法的示例: @implementation EnemyClass +(void)enemiesLevel1 { EnemyName = @"enemy1"; SKSpriteNode* enemy = [SK

我对编程还是相当陌生的,我尝试做的是:所以我把我的敌人从游戏场景中分离出来,放到另一个类中。在敌方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"

我正在从GameSecene.m调用该方法:

[EnemyClass enemiesLevel1]
这是EnemyClass.h,如果有人想知道:

@interface EnemyClass : NSObject

+(void)enemiesLevel1;
+(void)enemiesLevel2;
+(void)enemiesLevel3;
+(void)enemiesLevel4;
+(void)enemiesLevel5;
+(void)enemiesLevel6;
@end
这似乎是一个愚蠢的问题,但我仍然是新的,我将非常感谢任何帮助! 顺便说一句:我确实导入了sprite工具包框架

您的EnemyClass没有addChild或runAction方法,因为它不从SKNode或SKNode的子类继承

更改:

@interface EnemyClass : NSObject

更新:

此外,还将EnemiesLevel 1等定义为类方法。如果您想起诉addChild,它们必须是实例方法

以下是一个可能对您有所帮助的问题:

请务必阅读所有答案,因为其中一些答案有您应该注意的好信息。

更改

+(void)enemiesLevel1
{
    ....
}


方法前面的+表示它是类方法,而-表示它是实例方法。无法从类方法调用实例方法。请阅读为您提供的链接原型,以便更好地理解它们之间的差异。

您也可以将其作为类方法使用。不是一个实例方法。你明白这意味着什么吗?用代码中的另一个缺陷更新了答案。另外,这就是我要回答的问题,花些时间学习这些概念并应用它们。有一件事你可能要考虑的是EnemyClass是SkNob还是它有SkNoad。正如前面提到的原型,您是在类方法中执行此操作的,因此在本例中需要一个与addChild self等效的类方法来引用类。你可能想考虑一个A与A是A,这实际上有点自然,因为你真的不想紧密结合你的模型与图形表示。在这种情况下,您需要编写一个包装器方法来为您调用addChild。它并没有那么简单。他需要一种适当的方法来初始化EnemyClass的实例。他试图做的是创建一个工厂方法,通过类方法初始化一个实例。他可能真的想做一些像+InstanceTypeneMyLevel 1这样的事情。注意,我不是在宽恕他的方法论,只是在猜测他的意图。还请注意我是如何将其单数化的,因为EnemyClass听起来像是一个单数对象,而他的代码看起来像是一个单一对象。他还需要一个初始化方法。
@interface EnemyClass : SKNode
+(void)enemiesLevel1
{
    ....
}
-(void)enemiesLevel1
{
    ....
}