【发布时间】:2015-05-25 19:18:00
【问题描述】:
我在将精灵定位到游戏场景中的正确点时遇到问题。据我阅读position and anchorpoint 和spritekit programming guide 应该很清楚,0,0 在左下角。 我只使用横向模式。
但是当我使用我的代码时:
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
}
}
而且我实现了相当标准的场景:
override func viewDidLoad() {
super.viewDidLoad()
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)
}
}
这是结果:
我的“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)。
【问题讨论】:
-
我发现几乎相同的问题,但不知道这是否是一个好的解决方案,或者这是否对我有帮助。也许你应该试试这个解决方案,看看它是否对你有帮助。 ..
-
它不会改变任何东西。我检查了 self.frame 及其 (0.0, 0.0, 1024.0, 768.0)。问题一定出在其他地方。
-
@Jurik 您发布的那个链接的答案几乎是正确的。如果在初始化场景之前检查 if(!skView.scene),使用 viewWillLayoutSubviews 是一个好方法,因为这个方法可以被多次调用(即在旋转设备时)。在 viewDidLoad 中,view 的最终大小还不知道,这也是很多开发者使用 viewWillLayoutSubviews 来初始化场景的原因。你能用你当前如何在视图控制器中初始化场景来更新你的问题吗?
-
@Whirlwind 完成!但是你对 viewWillLayoutSubviews 是什么意思?因为
override func viewWillLayoutSubviews()不起作用......对不起,我对这些东西真的很陌生。 -
“不工作”是什么意思?如果您向我提供您的代码示例,也许我可以告诉您那里是否一切正常...
标签: ios swift sprite-kit landscape