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

时间:2014-07-26 22:07:37

标签: ios objective-c sprite-kit

我还是比较新的编程,我尝试做的是以下内容:所以我将我的敌人从我的游戏场景分离到另一个班级。在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框架。

2 个答案:

答案 0 :(得分:0)

您的EnemyClass没有addChildrunAction方法,因为它不会从SKNodeSKNode的子类继承。

改变:

@interface EnemyClass : NSObject

@interface EnemyClass : SKNode

更新:

此外,您已将enemiesLevel1等定义为类方法。如果你打算用它们起诉addChild,它们需要是实例方法。

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

What is the difference between class and instance methods?

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

答案 1 :(得分:0)

更改

+(void)enemiesLevel1
{
    ....
}

-(void)enemiesLevel1
{
    ....
}

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