我正在尝试(学习如何)使用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视网膜迷你和在部署信息>设备我指定的ipad。我遗漏了什么?谢谢。
发布于 2014-08-11 23:23:50
我想出来了。帧大小都搞砸了,因为我把我的游戏设置为只在风景中运行。解决方案:在viewDidLayoutSubviews实例viewDidLoad中初始化场景
- (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];
}https://stackoverflow.com/questions/25253654
复制相似问题