GameScene中使用SpriteKit的0,0在哪里?

时间:2015-05-25 19:18:01

标签: ios swift sprite-kit landscape

我在将精灵定位到游戏场景中的正确点时遇到问题。至于我阅读position and anchorpointspritekit programming guide,应该清楚0,0位于左下角。 我只使用横向模式。

但是当我使用我的代码时:

d

我实现了非常标准的场景:

import SpriteKit

class GameScene: SKScene {

    override func didMoveToView(view: SKView) {
        var ground = createGround()
        self.addChild(ground)        
    }

    func createGround()->SKSpriteNode {
        var ground = SKSpriteNode(imageNamed: "ground.png")
        ground.name = "ground"
        ground.anchorPoint = CGPointMake(0, 0)
        ground.position = CGPointMake(0, 0)

        return ground
    }
}

结果如下:

Screenshot of iPhone Simulator

我的" ground.png"的尺寸为120x120。我仔细检查了场景锚点,它在(0,0)处,甚至当我在didMoveToView中设置为(0,0)时,我仍然存在同样的问题。

不知何故Y因素搞砸了。当我将地面位置设置为(0,156)时,它直接位于左下角。所以它看起来像游戏场景y-anchor-point是-36而且地面的锚点在左上方而不是左下方。任何线索为什么?

我找到almost same problem,但框架看起来很好(0.0,0.0,1024.0,768.0)。

2 个答案:

答案 0 :(得分:0)

(.5,.5)的精灵锚点意味着它将在放置时通过其中心定位。因此,如果它位于屏幕的左下角,则只能看到图像的上半部分和右半部分。

如果您希望图像完全适合左下角而无需额外的数学运算,请将其锚点设置为:

sprite.anchorPoint = CGPointMake(0, 1)

答案 1 :(得分:0)

这应该有所帮助。

func createGround()->SKSpriteNode {
    var ground = SKSpriteNode(imageNamed: "ground.png")
    ground.name = "ground"
//  ground.anchorPoint = CGPointMake(0, 0) leave this at .5,.5
    ground.position = CGPointMake(ground.size.width/2, ground.size.height/2)

    return ground
}

并改变你的场景比例。

scene.scaleMode = .AspectFit

如果您的场景是1024 x 768并设置为AspectFill,则某些场景会被截断并且会使事情变得复杂。为了获得最佳效果,请将场景大小设置为适合iPhone的内容,但对于短期而言,Aspect fit会在屏幕上显示整个场景。无论哪种方式,你都会有一些被切断或有黑条,直到你将场景大小改为736乘414(iPhone 6 +)

因为默认情况下地面的原点位于中心,而场景的原点位于左下方,所以需要将位置移动一半宽度和地面的高度。

希望这有帮助并且有意义。