我在转换到不同场景的预定位置时遇到了麻烦。(例如,当Mario进入隧道时,他返回到他离开的原始场景)我能够编写一种方法来到达下一个场景,但节点不会出现在我想要的位置。
这是我转换到第二个场景的代码
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))
}如果你们能帮助一位年轻的开发人员,我将非常感激。太爱你了!
发布于 2016-11-08 05:15:02
你有很多方法可以做到这一点。它的一般要点是,只要记住“马里奥的”位置,在你离开场景,并将其传递到下一个场景中的属性。(或者您可以使用委托来获取信息)
如果场景是他从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))
}发布于 2016-11-08 23:26:50
您可以使用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")
}
}https://stackoverflow.com/questions/40473080
复制相似问题