В настоящее время у меня есть сцена с кучей узлов, установленных в ряды. В каждой строке есть один узел, который можно убрать с экрана. Как только узел будет перемещен с экрана, узел в строке под ним переместится вверх, чтобы занять место узла, который был перемещен с экрана. Я знаю, как смахнуть узлы с экрана, но у меня проблемы с перемещением всех строк вверх, чтобы заполнить пустую строку. Прямо сейчас, когда я смахиваю, только одна из строк перемещается за пределы экрана, но все остальные узлы остаются на экране и не смахивают. Я вижу, что новые узлы генерируются, но другие узлы, находящиеся в данный момент на экране, не затрагиваются новым узлом, и вместо этого новый узел перекрывает другие узлы на экране. В настоящее время у меня есть узлы, созданные в файле .sks здесь:
Ранее я получил некоторую помощь из этого сообщения: Как создать несколько спрайтов (узлов) с одинаковой текстурой, которые будут автоматически генерировать новый при удалении одного узла?
Вот мой код:
let plankName = "woodPlank"
class PlankScene: SKScene {
var plankWood : SKSpriteNode?
var plankArray : [SKSpriteNode] = []
override func didMove(to view: SKView) {
enumerateChildNodes(withName: plankName) {
node, stop in
self.plankWood = node 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 {
swipeAndAddPlank(completion: {
self.addPlank(completion: {
self.movePlanksUp()
})
})
}
}
func swipeAndAddPlank(completion: (()->Void)?) {
let moveOffScreenRight = SKAction.moveTo(x: 400, duration: 0.5)
let nodeFinishedMoving = SKAction.removeFromParent()
//let completionAction = SKAction.run({completion!()})
plankWood?.run(SKAction.sequence([moveOffScreenRight,nodeFinishedMoving]))
completion?()
}
func addPlank(completion: (()->Void)?) {
let newPlank = plankWood?.copy() as! SKSpriteNode
newPlank.position = CGPoint(x: 0, y: -259)
plankArray.append(newPlank)
print(plankArray.count)
addChild(newPlank)
completion?()
}
func movePlanksUp() {
for node:SKSpriteNode in plankArray {
node.run(SKAction.move(by: CGVector(dx: 0, dy: 50), duration: 0.10))
}
}
}