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; }
其编译结果如下:
现在一切正常,但是,如果我改变坦克的Y为256:
Tank *tank = [Tank tankAtPosition:CGPointMake(CGRectGetMidX(self.frame), 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]; }