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

SKShapeNode定位
EN

Stack Overflow用户
提问于 2014-11-05 15:47:09
回答 2查看 2.3K关注 0票数 1

我在SpriteKit周围打探,发现了一些奇怪的地方,我只是在iPhone上添加应该是全屏的矩形SKShapeNode

代码语言:javascript
复制
override func didMoveToView(view: SKView) {
    let _box            = SKShapeNode(rectOfSize: self.frame.size)
    _box.strokeColor    = SKColor.blueColor()
    _box.fillColor      = SKColor.blueColor()
    _box.position       = CGPointMake(200, 200)
    _box.name           = "box"
    self.addChild(_box)

    let _player         = SKShapeNode(circleOfRadius: 50)
    _player.position    = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))
    _player.fillColor   = SKColor.redColor()
    _player.strokeColor = SKColor.redColor()
    _player.name        = "player"
    _player.physicsBody = SKPhysicsBody(circleOfRadius: 50)
    _player.physicsBody?.dynamic = true
    _player.physicsBody?.allowsRotation = false
    self.addChild(_player)

    let _ground         = SKShapeNode(rectOfSize: CGSizeMake(self.frame.width, 20))
    _ground.name        = "ground"
    _ground.position    = CGPointMake(0, 0)
    _ground.fillColor   = SKColor.greenColor()
    _ground.strokeColor = SKColor.greenColor()
    _ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.width, 20))
    _ground.physicsBody?.dynamic = false
    self.addChild(_ground)
}

我的视图是这样初始化的:覆盖func viewDidLoad() { super.viewDidLoad() }

代码语言:javascript
复制
override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
        // Configure the view.
        let skView = self.view as SKView
        skView.showsFPS = true
        skView.showsNodeCount = true

        /* Sprite Kit applies additional optimizations to improve rendering performance */
        skView.ignoresSiblingOrder = true

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .AspectFill

        skView.presentScene(scene)
    }

}

生成的场景如下:屏幕截图

所有节点都移到左侧底部。基本上,矩形形状的左下角超出了界限(我已经检查过,通过将蓝色形状定位为(200,200)而不是(0,0),左瓶边缘仍然超出了屏幕框架。

场景的锚点被设置为(0,0),所以它对我来说基本上是一样的,它为形状的中心点设置位置。

什么是定义节点左下角位置的最佳方法,而不是中点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-05 16:46:56

如果使用bezier路径或CGPath创建形状,则可以指定其“锚点”的位置,其中路径的原点指定路径的下/左角。例如,

代码语言:javascript
复制
    UIBezierPath* bezierPath = [UIBezierPath bezierPathWithRect: CGRectMake(0, 0, 50, 50)];
    SKShapeNode *shape = [SKShapeNode node];
    shape.path = bezierPath.CGPath;
    shape.fillColor = [SKColor blueColor];

此外,如果您的部署目标是iOS 8,则可以使用

代码语言:javascript
复制
    SKShapeNode *shape = [SKShapeNode shapeNodeWithRect:CGRectMake(0, 0, 50, 50)];
    shape.fillColor = [SKColor blueColor];
票数 1
EN

Stack Overflow用户

发布于 2014-11-05 15:52:25

代码语言:javascript
复制
_box.position       = CGPointMake(self.size.width*.5, self.size.height*.5)

这将定位您的精灵的中心在屏幕的中心。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26761267

复制
相关文章

相似问题

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