2014-07-26 53 views
0

我對編程還很陌生,我試圖做的事情如下:所以我將我的敵人從我的遊戲場景中分離出來,成爲一個不同的類。在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 

這似乎是一個愚蠢的問題,但我還是新的,我將不勝感激任何幫助! 順便說一句:我沒有導入精靈套件框架。

回答

0

您的EnemyClass沒有addChildrunAction方法,因爲它不會繼承自SKNodeSKNode的子類。

變化:

@interface EnemyClass : NSObject 

@interface EnemyClass : SKNode 

更新:

此外,你必須enemiesLevel1等定義爲類方法。如果你打算使用addChild,他們需要成爲實例方法。

這裏有一個問題,可以幫助你:有良好的信息,你應該知道的

What is the difference between class and instance methods?

一定要閱讀所有的答案,因爲他們幾個。

+0

仍給我同樣的錯誤 – user3545063

+0

你也有它作爲一個類的方法。不是實例方法。你明白這是什麼意思嗎? – prototypical

+0

更新了您的代碼中的另一個缺陷的答案。而且,就我要去解答這個問題而言,花點時間學習一些這些概念並應用它們。 – prototypical

0

變化

+(void)enemiesLevel1 
{ 
    .... 
} 

-(void)enemiesLevel1 
{ 
    .... 
} 

的+在方法的前意味着它是一個類的方法,以及 - 意味着它是一個實例方法。實例方法不能從類方法調用。請閱讀爲您提供的原型鏈接,以便您更好地瞭解它們之間的差異。

+0

它不是那麼簡單。他需要一個適當的方法來初始化EnemyClass的一個實例。他試圖做的是創建一個工廠方法來通過類方法初始化一個實例。他可能真的想要做一些像+(instancetype)enemyLevel1。注意我不是在寬恕他的方法,只是猜測他的意圖是什麼。另外請注意我是如何做出這個單數的,因爲EnemyClass聽起來像一個單一的對象,他的代碼看起來像是一個單一的對象。他還需要一個初始化方法。 –