Sprite kit SpriteKit坐标系原点
我一直在尝试用Swift的SpriteKit框架在屏幕上放置节点,但是我找不到原点。我以为它在左下角,但当我把node3放在那里时,它似乎在屏幕的某个地方。只有node1出现在屏幕上,有人能解释发生了什么吗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(
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个节点连接到场景。您确定附加到问题的代码与屏幕截图匹配吗?