我正在尝试(学习如何)使用 SpriteKit 构建游戏,但我遇到了一个困扰我几个小时的问题。 我有一个名为 Tank 的类,它具有以下构造函数:
+ (instancetype)tankAtPosition:(CGPoint)position {
Tank *tank = [self spriteNodeWithImageNamed:@"tank_base_1"];
tank.position = position;
tank.anchorPoint = CGPointMake(0.5, 0.5);
return tank;
}
在我的场景中,我有以下构造函数:
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"level_bg_1"];
background.xScale = 0.40f;
background.yScale = 0.40f;
background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
[self addChild:background];
Tank *tank = [Tank tankAtPosition:CGPointMake(CGRectGetMidX(self.frame), 512)];
[self addChild:tank];
}
return self;
}
在以下渲染中编译结果:
现在一切正常,但是,如果我将坦克的 y 更改为 256:
Tank *tank = [Tank tankAtPosition:CGPointMake(CGRectGetMidX(self.frame), 256)];
我明白了:
据我所知,底部是 y = 0 和中间点 y = 512,所以当我指定 y = 256 时,它应该在屏幕的下半部分居中。为什么靠近边缘? 测试设备是 ipad retina mini,在“部署信息”>“设备”中我指定了 iPad。 我错过了什么?谢谢。
最佳答案
我想通了。帧大小都乱七八糟,因为我将游戏设置为仅横向运行。解决方法:在viewDidLoad的viewDidLayoutSubviews中初始化场景
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
// Configure the view.
SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES;
// Create and configure the scene.
SKScene * scene = [Level sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
// Present the scene.
[skView presentScene:scene];
}
关于ios - SKSpriteNode位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25253654/