为 '球员' 不可见的@interface声明选择 'walkRight'
问题描述:
// 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'” 我真的不知道为什么。如果有人能帮助我,我将不胜感激。谢谢。
答
确保你已经在Player.h文件中声明了walkRight方法。这应该在您的界面声明后的某个位置在该文件中:
-(void)walkRight;
允许导入Player.h的其他文件知道Player.m实现walkRight方法。
答
更改您的播放器方法返回instancetype
而不是id
。这将使警告消失。还在Player
类的标题(.h
)文件中声明walkRight
方法。
+(instancetype)player{
Player *player = [Player spriteNodeWithColor:[UIColor brownColor] size:CGSizeMake(32, 32)];
....
return player;
}
了解更多关于instancetype
here和here。
希望有帮助!
非常感谢! – BruceTheGoose
不客气。如果答案解决了您的问题,请标记为已接受的答案。 – kleezy