首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKSpriteNode位置

SKSpriteNode位置
EN

Stack Overflow用户
提问于 2014-08-11 22:49:27
回答 1查看 1.7K关注 0票数 1

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

代码语言:javascript
复制
+ (instancetype)tankAtPosition:(CGPoint)position {
    Tank *tank = [self spriteNodeWithImageNamed:@"tank_base_1"];
    tank.position = position;
    tank.anchorPoint = CGPointMake(0.5, 0.5);
    return tank;
}

在我的场景中,我有以下构造函数:

代码语言:javascript
复制
-(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:

代码语言:javascript
复制
Tank *tank = [Tank tankAtPosition:CGPointMake(CGRectGetMidX(self.frame), 256)];

我明白了:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-11 23:23:50

我想出来了。帧大小都搞砸了,因为我把我的游戏设置为只在风景中运行。解决方案:在viewDidLayoutSubviews实例viewDidLoad中初始化场景

代码语言:javascript
复制
- (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];
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25253654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档