2014-06-24 16 views
0

// Player.m为 '球员' 不可见的@interface声明选择 'walkRight'

#import "Player.h" 
@implementation Player 

+(id)player{ 

    Player *player = [Player spriteNodeWithColor:[UIColor brownColor] size:CGSizeMake(32, 32)]; 

    player.name = @"player"; 

    player.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:player.size]; 

    return player; 

} 



- (void)walkRight { 

    SKAction *incRight = [SKAction moveByX:10 y:0 duration:0]; 

    [self runAction:incRight]; 

} 


@end 

// MyScene.h

#import "MyScene.h" 
#import "Player.h" 



@implementation MyScene 

-(id)initWithSize:(CGSize)size {  

    if (self = [super initWithSize:size]) { 

     /* Setup your scene here */ 

     self.anchorPoint = CGPointMake(0.5, 0.5); 

     self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0]; 



    SKSpriteNode *ground = [SKSpriteNode spriteNodeWithColor:[UIColor greenColor] size:CGSizeMake(self.frame.size.width, 30)]; 

    ground.position = CGPointMake(0, -self.frame.size.height/2 + ground.frame.size.height/2); 

    ground.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:ground.size]; 

    ground.physicsBody.dynamic = NO; 

    [self addChild:ground]; 



    Player *player = [Player player]; 

    [self addChild:player]; 

} 

return self; 

} 



-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

Player *player = (Player *)[self childNodeWithName:@"player"]; 

[player walkRight]; 



} 



-(void)update:(CFTimeInterval)currentTime { 

/* Called before each frame is rendered */ 

} 



@end 

我是很新的Objective-C 。好吧,我试图建立上面的代码,并得到错误“没有可见@界面的'球员'宣布选择'walkRight'” 我真的不知道为什么。如果有人能帮助我,我将不胜感激。谢谢。

回答

2

确保你已经在Player.h文件中声明了walkRight方法。这应该在您的界面声明后的某个位置在该文件中:

-(void)walkRight; 

允许导入Player.h的其他文件知道Player.m实现walkRight方法。

+0

非常感谢! – BruceTheGoose

+0

不客气。如果答案解决了您的问题,请标记为已接受的答案。 – kleezy

0

更改您的播放器方法返回instancetype而不是id。这将使警告消失。还在Player类的标题(.h)文件中声明walkRight方法。

+(instancetype)player{ 
    Player *player = [Player spriteNodeWithColor:[UIColor brownColor] size:CGSizeMake(32, 32)]; 

    .... 

    return player; 
} 

了解更多关于instancetype herehere

希望有帮助!

相关问题