我无法转换到不同场景上的预定位置。 (例如,当马里奥进入隧道时,他返回到他离开的原始场景)我能够编写一种方法来进入下一个场景,但节点没有出现,我想要它。
这是我转换到第二个场景的代码
func didBeginContact(contact: SKPhysicsContact) {
_ = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
if (contact.bodyA.categoryBitMask == BodyType.cup.rawValue && contact.bodyB.categoryBitMask == BodyType.ball.rawValue) {
touchmain()
} else if (contact.bodyA.categoryBitMask == BodyType.ball.rawValue && contact.bodyB.categoryBitMask == BodyType.cup.rawValue) {
touchmain()
}
}
func touchmain() {
let second = GameScene(fileNamed:"GameScene")
second?.scaleMode = .AspectFill
self.view?.presentScene(second!, transition: SKTransition.fadeWithDuration(0.5))
}
如果你们能帮助年轻的开发者,我真的很感激。非常爱!
答案 0 :(得分:0)
有很多方法可以解决这个问题。它的一般要点是,在离开场景之前记住“马里奥”的位置并将其传递到下一场景中的属性。 (或者您可以使用委托来获取信息)
如果场景是他在SceneA(主要级别)中开始转移到SceneB(小型钱币隧道)然后返回到SceneA(主级别),您可以将该位置传递给SceneB并在SceneB中具有存储Mario所在位置的属性是。然后,当您转移回SceneA时,只需将该属性传递回SceneA中的属性,并相应地定位Mario和SceneA
func touchmain() {
let marioPos: CGPoint = Mario.position
let second = GameScene(fileNamed:"GameScene")
second.startingPos = marioPos
second?.scaleMode = .AspectFill
self.view?.presentScene(second!, transition: SKTransition.fadeWithDuration(0.5))
}
答案 1 :(得分:0)
您可以使用SKScene上的userData
字段记住位置:
在第一个场景init的某处,执行:
userData = [String : NSObject]()
此外,在您的第一个场景中,我们希望覆盖didMove(to:SKView)
以根据您的用户数据设置马里奥位置:
override func didMove(to:SKView)
{
super.didMove(to:to)
if let position = self.userData["position"]
{
mario.position = position
}
}
然后我们想要在离开场景时实际分配用户数据:
func touchmain() {
if let userData = self.userData
{
userData["marioPosition"] = mario.position
}
if let second = GameScene(fileNamed:"GameScene")
{
second.scaleMode = self.scaleMode //I assume we do not want to change scaleMode between scenes
second.userData = userData
self.view?.presentScene(second, transition: SKTransition.fadeWithDuration(0.5))
}
else
{
print("Error creating Second scene")
}
}
当我们回来时,我们想要将userData
转回第一个屏幕。这是我之前提到的didMove
发挥作用的地方,这将马里奥的位置设置到以前的位置。
...我没有看到这段代码,所以请尝试将其应用到你的工作中
func touchBackToFirst() {
if let first = GameScene(fileNamed:"GameScene")
{
first.scaleMode = self.scaleMode
first.userData = userData
self.view?.presentScene(first, transition: SKTransition.fadeWithDuration(0.5))
}
else
{
print("Error creating Firstscene")
}
}