Ios 如何在SpriteKit中模拟比屏幕更大的世界?
我正在寻找合适的SpriteKit方法来处理可滚动的世界。考虑下面的图像: 在这个人为的例子中,世界边界是虚线,蓝点可以在这些边界内的任何地方移动。然而,在任何给定的点,这个世界的一部分可以存在于屏幕外,如图所示。我想知道如何在“世界”的任何地方移动蓝点,同时保持相机固定在蓝点上。 有一个很好的答案,我目前找不到。其基本思想是:Ios 如何在SpriteKit中模拟比屏幕更大的世界?,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我正在寻找合适的SpriteKit方法来处理可滚动的世界。考虑下面的图像: 在这个人为的例子中,世界边界是虚线,蓝点可以在这些边界内的任何地方移动。然而,在任何给定的点,这个世界的一部分可以存在于屏幕外,如图所示。我想知道如何在“世界”的任何地方移动蓝点,同时保持相机固定在蓝点上。 有一个很好的答案,我目前找不到。其基本思想是: 将“世界”节点添加到场景中。您可以给它一个大于屏幕大小的宽度/高度 当您“移动”角色(或蓝点)时,实际上您移动了您的世界节点,但方向相反,这会给人一种您正在移动的印象
override func didMoveToView(view: SKView) {
self.anchorPoint = CGPointMake(0.5, 0.5)
//self.size = CGSizeMake(600, 600)
// Add world
world = SKShapeNode(rectOfSize: CGSize(width: 500, height: 500))
world.fillColor = SKColor.whiteColor()
world.position = CGPoint(x: size.width * 0.5, y: size.height * 0.5)
world.physicsBody?.usesPreciseCollisionDetection = true
self.addChild(world)
}
override func update(currentTime: CFTimeInterval) {
world.position.x = -player.position.x
world.position.y = -player.position.y
}
如果您创建一个“摄影机”节点,并将其添加到“世界”节点中,则有两个简单的函数(如上)允许您在摄影机节点在世界中移动时“跟踪”该节点,尽管实际上您正在移动世界,这与Abdul Ahmad的回答类似
此方法允许您在相机上使用SpriteKit功能。您可以对其应用物理,对其运行操作,对其施加约束,允许以下效果:
- 摄像机抖动(动作)
- 碰撞(物理实体,或将另一个节点的位置与物理实体匹配)
- 滞后跟随(例如,在摄影机上放置约束,使其与角色保持一定距离)
这种限制尤其为移动的世界增添了一种美妙的触感,因为它允许“主角”在接近屏幕边缘时自由地移动世界。我刚才也问过这个问题。。有趣的是,对我们来说,这是一个如此令人困惑的想法,noob game Devsthere有一个很好的答案,我现在正试图为你找到,明白了吗。我想我错过了“世界”节点的概念。这是有道理的。谢谢你的帮助。没问题,几个月前我也很困惑。我很高兴能帮上忙
override func didSimulatePhysics() {
self.centerOnNode(self.camera)
}
func centerOnNode(node: SKNode) {
if let parent = node.parent {
let nodePositionInScene: CGPoint = node.scene!.convertPoint(node.position, fromNode: parent)
parent.position = CGPoint(
x: parent.position.x - nodePositionInScene.x,
y: parent.position.y - nodePositionInScene.y)
}}