gpt4 book ai didi

swift - 我可以让 SKSpriteNode 在过渡期间显示在不同的场景上吗

转载 作者:行者123 更新时间:2023-11-30 10:08:44 25 4
gpt4 key购买 nike

我正在制作一款游戏,并且正在处理自定义过渡。当您单击 TitleScene 上的播放按钮时,它会移动 GameScene。这是它的 gif。

enter image description here

现在我想让这些按钮落在另一个场景上,或者显示在另一个场景之上。因此本质上按钮需要位于 GameScene 上,即使它们是 TitleScene 的一部分。这是我的转换代码:

let transition = SKTransition.revealWithDirection(SKTransitionDirection.Up, duration: 2)
transition.pausesIncomingScene = false
transition.pausesOutgoingScene = false

currentScene.view?.presentScene(futureScene, transition: transition)

我不确定如何做到这一点。需要任何帮助。

更新

我意识到执行此操作的唯一方法是将 SKSpriteNodes 从 TitleScene 复制到 GameScene。检查此代码:

func createTransition(transitionFrom presentScene: SKScene, to futureScene: SKScene, withTransition transition: transitionTypes) {

var yPositions : [CGFloat] = []
for child in presentScene.children as! [SKSpriteNode] {
yPositions.append(child.position.y)
}
let topSprite = yPositions.maxElement() // finds the sprite closest to the top

for child in presentScene.children as! [SKSpriteNode] {
if child.position.y == topSprite {
var vel = CGFloat.random(-1, 1)
if (vel < 0.3 && vel >= 0) {
vel += 0.5
}
if (vel > -0.3 && vel <= 0) {
vel -= 0.5
}
let fallAction = SKAction.applyTorque(vel, duration: 0.5) // slightly turns the Sprite

presentScene.physicsWorld.gravity.dx = CGFloat.random(-0.3,0.3)

child.physicsBody?.affectedByGravity = true // Become affected by gravity and falls

child.runAction(fallAction, completion: {
for otherChild in presentScene.children as! [SKSpriteNode] {

if otherChild.name != "background" { //copies all Sprites except the background

let copiedChild = otherChild.copy() as! SKSpriteNode
copiedChild.position.y += futureScene.frame.size.height

futureScene.physicsWorld.speed = presentScene.physicsWorld.speed
futureScene.physicsWorld.gravity = presentScene.physicsWorld.gravity //makes it so they have the same physicsWorlds

futureScene.addChild(copiedChild)
}
}
})

let transition = SKTransition.pushWithDirection(SKTransitionDirection.Up, duration: 2)
transition.pausesIncomingScene = false
transition.pausesOutgoingScene = false

presentScene.view?.presentScene(futureScene, transition: transition)
}
}

}

这就是它的样子:

enter image description here

你可以看到它们没有正确排列,有人知道我缺少什么吗?

最佳答案

场景一:一个大场景

+------------+   }
| | }
| Title | }
| | }
| | }
| | } Initially visible half of full scene.
| btn btn | }
| Play | }
| btn btn | }
+------------+ } }
| | }
| | }
| | }
| | }
| game | } Half of full scene visible after play button is pressed
| | } (the game)
| | }
| | }
+------------+ }

当按下Play时,这个大矩形(14x19)会向上移动,这样顶部的矩形就不再可见,而是底部的矩形可见。因为这在技术上是一个大场景,所以按钮/标题可以在两个“场景”中自由移动(它实际上只是一个大场景)。

场景 2:两个“场景”重叠

             +------------+   }
| | }
| Title | }
| | }
| | }
| | } Initially visible half of big scene.
| btn btn | } z-pos of the rectangle on the right is higher than
| Play | } the z-pos of the one on the left, thereby allowing
| btn btn | } its contents to be visible above those of the gamescene.
+------------+ | } }
| | | }
| | | }
| | | }
| | | }
| game | | } Half of scene and gamescene visible after play button
| | | } is pressed (the game)
| | | }
| | | }
+------------+------------+ }

这些场景重叠,最右边场景的下半部分与最左边场景匹配。当按下播放按钮时,两个场景以相同的速率向上移动,直到仅底部场景可见。实际上,最右侧场景的下半部分仍然位于较小场景的顶部。

较大场景的 alpha0。对于大场景的上半部分,可以添加背景节点;此设置允许游戏可见,并且按钮仍然位于游戏上方。

为了确保不存在无法与游戏场景交互的问题,因为从技术上讲,游戏场景之上有一个场景(这可能会阻碍交互),请删除较大的场景或将其 z 位置更改为低于场景游戏场景。这可能不是必要的,但万一是……你知道的。

请记住,您无法真正嵌入场景(至少根据 this ),因此您无法真正在场景 2 中使用两个场景。您也可以将游戏场景放在 SKNode 或类似的东西中作为作品- 周围。

关于swift - 我可以让 SKSpriteNode 在过渡期间显示在不同的场景上吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34404602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com