Sprite kit SpriteKit坐标系原点

Sprite kit SpriteKit坐标系原点,sprite-kit,swift,skspritenode,Sprite Kit,Swift,Skspritenode,我一直在尝试用Swift的SpriteKit框架在屏幕上放置节点,但是我找不到原点。我以为它在左下角,但当我把node3放在那里时,它似乎在屏幕的某个地方。只有node1出现在屏幕上,有人能解释发生了什么吗 class GameScene: SKScene { override func didMoveToView(view: SKView) { let node = SKSpriteNode(color: UIColor.greenColor(), size: CGSize(

我一直在尝试用Swift的SpriteKit框架在屏幕上放置节点,但是我找不到原点。我以为它在左下角,但当我把node3放在那里时,它似乎在屏幕的某个地方。只有node1出现在屏幕上,有人能解释发生了什么吗

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {

    let node = SKSpriteNode(color: UIColor.greenColor(), size: CGSize(width: 50, height: 50))
    node.position = CGPoint(x:CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))
    self.addChild(node)

    let node2 = SKSpriteNode(color: UIColor.orangeColor(), size: CGSize(width: 50, height: 50))
    node2.position = CGPoint(x: 200.0  , y: 200.0 as Double)
    self.addChild(node2)

    let node3 = SKSpriteNode(color: UIColor.redColor(), size: CGSize(width: 50, height: 50))
    node3.position = CGPoint(x: 0.0  , y: 0.0)
    self.addChild(node3)
}
SpriteKit模板具有以下视图配置:

        let skView = self.view as SKView

        /* 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)

正如@LearnCoco2D提到的,视图和场景大小不匹配。为了解决这个问题,我将scene.scaleMode改为ResizeFill,并绘制了所有相对于视图而非场景的矩形

scene.scaleMode = .ResizeFill

屏幕快照右下角的节点数表示只有1个节点连接到场景。 您确定附加到问题的代码与屏幕截图匹配吗?使用打印调用详细说明调试控制台中的节点坐标。还要测试节点是否存在

在更新中运行这样的方法

私有函数interateNodes(){

儿童中的儿童{ 印刷品(儿童) }


}如果场景由
.anchorPoint
值定义,则坐标系的中心,默认情况下,该值为
(0.5,0.5)
,这意味着具有位置
(x:0,y:0)
的子节点的位置为场景帧高度和宽度的一半

然后左上角是
(x:-scene.frame.width/2,y:scene.frame.height/2)

然后左下角是
(x:-scene.frame.width/2,y:-scene.frame.height/2)

然后右上角是
(x:scene.frame.width/2,y:scene.frame.height/2)

然后右下角是
(x:scene.frame.width/2,y:-scene.frame.height/2)

如果将
.anchorPoint
更改为
(0,0)
,原点将放置在左下角,以此类推

在您的示例中,绿色节点从
CGRectGetMidX
CGRectGetMidY
获取其位置,这正好给出了
(0,0)
,因此它被放置在场景的中心

我不知道场景的大小,位置为
(200200)
的橙色节点可能位于屏幕右上方的
。
(
“y:200.0双精度”
-此处不需要
“双精度”


位置为
(0,0)
的红色节点与绿色节点的位置相同。由于您没有设置
zPosition
,它被具有相同坐标和大小的绿色节点重叠。

尝试200.f和200.f而不是200.f,相同的结果:/Origin位于左下角。如果得到不同的结果,请检查scene.size是否与视图和方向匹配,并检查scene.scaleMode,该选项应设置为aspect fit或resize fill。您在
50,50
处的第一个矩形显示在视图的中心。这可能意味着您的
size
scale
正在以某种方式改变视图,使
50,
50`处于中心位置。在这种情况下,
0,0
200200
在屏幕外是有意义的。您好,屏幕快照右下角的节点数表示只有1个节点连接到场景。您确定附加到问题的代码与屏幕截图匹配吗?