我一直在尝试使用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)
答案 0 :(得分:2)
如@ LearnCoco2D所述,视图和场景大小不匹配。要解决此问题,我将scene.scaleMode更改为ResizeFill并绘制了相对于视图而不是场景的所有矩形。
scene.scaleMode = .ResizeFill
答案 1 :(得分:1)
如果场景由 .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)
,因此它被放置在场景的中心。
我不知道你场景的大小,位置为 (200, 200)
的橙色节点可能在屏幕外到 top-right
。
("y: 200.0 as Double"
- 这里不需要 "as Double"
)。
位置为 (0, 0)
的红色节点与绿色节点的位置相同。由于您没有设置 zPosition
,它被具有相同坐标和大小的绿色节点重叠。
答案 2 :(得分:0)
您在屏幕快照右下角的节点数表示您仅在场景中附加了1个节点。 您确定问题附带的代码是否与屏幕截图匹配?使用打印调用来详细说明调试控制台中节点的坐标。还测试一下节点是否存在
在更新中运行这样的方法
私有函数interateNodes(){
儿童中的儿童{ 打印(儿童) }
}