gpt4 book ai didi

ios - 如何创建具有相同纹理的多个 Sprite (节点),并在删除一个节点时自动生成一个新的 Sprite ?

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

我正在尝试创建一个游戏,用户可以滑动节点,一旦滑动,就会在屏幕底部创建一个新节点,并将所有其他节点向上推,有点像反向俄罗斯方 block 。这是一个非常基本的图像,可以给您一个想法:nodes

我已经能够弄清楚如何将节点滑出屏幕,但似乎无法弄清楚如何让所有其他节点向上移动一行并在底部创建一个新节点。我尝试为刚刚滑动的节点执行“addChild”,以便它可以再次出现在底部,但不断收到错误消息,说明该节点已经有一个父节点。这是到目前为止我的代码:

import SpriteKit


let plankName = "woodPlank"

class PlankScene: SKScene {

var plankWood : SKSpriteNode?


override func didMove(to view: SKView) {

plankWood = childNode(withName: "woodPlank") as? SKSpriteNode


let swipeRight : UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(PlankScene.swipedRight))

swipeRight.direction = .right

view.addGestureRecognizer(swipeRight)

}


func swipedRight(sender: UISwipeGestureRecognizer) {

if sender.direction == .right {

let moveOffScreenRight = SKAction.moveTo(x: 400, duration: 0.5)

let nodeFinishedMoving = SKAction.removeFromParent()

plankWood?.run(SKAction.sequence([moveOffScreenRight, nodeFinishedMoving]))

plankWood?.position = CGPoint(x: 0, y: -250)
addChild(plankWood!)
}

}
}

最佳答案

正如 @KnightOfDragon 所说,您可以使用 .copy() 创建 plankWood Sprite 的副本,这样您就可以创建一个函数来添加类似这样的木板:

func addPlank() {
let newPlank = plankWood.copy() as! SKSpriteNode
newPlank.position = CGPoint(x: 0, y: -250) //This should be your first plank position

addChild(newPlank)
}

然后你应该有一个 SKSpriteNode 数组来保存你的木板,并且你可以有一个像这样的函数来向上移动你的其他木板:

func movePlanksUp() {
for node:SKSpriteNode in yourPlankArray {
node.runAction(SKAction.moveBy(CGVector(dx: 0, dy: 250), duration: 0.10))
}
}

此外,如果您要创建 plankArray,则应将此行代码添加到 addPlank() 函数中:yourPlankArray.append(newPlank)

我希望这对您有所帮助,如有任何问题,请随时问我。

关于ios - 如何创建具有相同纹理的多个 Sprite (节点),并在删除一个节点时自动生成一个新的 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39800600/

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