SKSpriteNode的位置

我正在尝试(学习如何)使用SpriteKit构build游戏,而且遇到了一个困扰我几个小时的问题。 我有一个类名为坦克与下面的构造函数:

+ (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; } 

其编译结果如下: 512

现在一切正常,但是,如果我改变坦克的Y为256:

 Tank *tank = [Tank tankAtPosition:CGPointMake(CGRectGetMidX(self.frame), 256)]; 

我得到这个: 256

据我所知,底部是y = 0和中间点y = 512,所以当我指定ay = 256时,它应该居中在屏幕的下半部分。 为什么是靠近边缘? testing设备是一个ipad视网膜迷你,并在部署信息>设备我指定的iPad。 我错过了什么? 谢谢。

我想到了。 帧的大小都搞砸了,因为我把我的游戏只在横向上运行。 解决方法:在viewDidLoad的viewDidLayoutSubviews instend中初始化场景

 - (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]; }