gpt4 book ai didi

swift - 当另一个节点达到某个 y 值时如何生成新节点

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

我有一个圆向上移动,当该圆到达某个 y 点时,如何才能从下面生成另一个节点?

这是我目前用于填充圆圈的代码,但我无法将其与物理体一起使用,因为它会生成太多节点并减慢我的应用程序的速度:

   func createCirclesOnLine(line: CGFloat) {
var currentY : CGFloat = -110
let maxY = self.size.width * 15
let spacing : CGFloat = 120
while currentY < maxY {
let circle = SKSpriteNode(imageNamed: "first@2x")

circle.physicsBody?.dynamic = false

circle.position = CGPointMake(line, currentY)


//circle.physicsBody?.restitution = -900
circle.size = CGSizeMake(75, 75)
// circle.physicsBody = SKPhysicsBody(rectangleOfSize: circle.size)
let up = SKAction.moveByX(0, y: 9000, duration: 90)


circle.runAction(up)

foregroundNode.addChild(circle)
currentY += CGFloat((random() % 400) + 70)


}

如有必要,将发布更多代码。

最佳答案

有两种方法可以解决这个问题。一种是简单地检查每个圆圈的 y 位置,看看它是否在屏幕上方。您需要对圆圈的引用,因此...

class GameScene: SKScene {
var circles = Array<SKSpriteNode>()
...

createCirclecesOnLine 函数中,在创建数组时将每个圆圈添加到数组中。

...
self.addChild(circle)
circles.append(circle)

然后,在更新方法中,枚举圆圈以查看其中是否有任何圆圈位于屏幕顶部上方。

override func update(currentTime: NSTimeInterval) {
for circle in circles {
if circle.position.y > self.size.height + circle.size.height/2 {
//Send circle back to the bottom using the circle's position property
}
}
}

此解决方案可行,但会导致每个更新周期进行大量不必要的检查。

第二个更有效(并且稍微复杂)的建议是在屏幕顶部上方添加一个不可见的节点,以拉伸(stretch)屏幕宽度。当圆圈与它碰撞时,只需将其移动到屏幕底部即可。研究实现 SKPhysicsContactDelegate 协议(protocol)以及需要做什么才能使其发挥作用。如果您在此解决方案中遇到问题,请针对这些问题发布一个单独的问题。

关于swift - 当另一个节点达到某个 y 值时如何生成新节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34455459/

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