Есть ли способ добавить действие ко всем созданным узлам, кроме одного узла в swift?

Я хочу добавить действие для всех узлов на сцене, кроме одного или двух узлов.

Или я хотел бы найти способ доступа ко всем узлам другим способом использования метода «name».

Это не полная игра, но я не хочу использовать метод «name», потому что каждый квадрат имеет другое имя.

import SpriteKit import GameplayKit var Score = 0 class GameScene: SKScene { let SquareSide = 100 var touchedNode = SKNode() var touchLocation = CGPoint() let ScoreLabel = SKLabelNode() let squareNumber = 0 override func didMove(to view: SKView) { CreatSquares() } func CreatSquares(){ let square = SKShapeNode(rect: CGRect(x: Int(arc4random_uniform(UInt32(self.frame.width))), y: Int(arc4random_uniform(UInt32(self.frame.height))), width: SquareSide, height: SquareSide)) if Score <= 10{ square.fillColor = UIColor.orange} else{ square.fillColor = UIColor.blue } square.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: square.frame.width, height: square.frame.height), center: CGPoint(x: square.position.x, y: square.position.y)) square.physicsBody?.affectedByGravity = false square.physicsBody?.allowsRotation = false square.physicsBody?.categoryBitMask = 0 square.name = "square\(number)" number++ self.addChild(square) } } func CreatScoreLabel(){ let ScoreLabel = SKLabelNode() ScoreLabel.text = "Your Score is:\(Score)" ScoreLabel.position = CGPoint(x: self.frame.width/2, y: self.frame.height - 50) ScoreLabel.color = UIColor.white self.addChild(ScoreLabel) } func updatScore(){ ScoreLabel.text = "Your Score is:\(Score)" } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { for touch in touches { touchLocation = touch.location(in: self) touchedNode = self.atPoint(touchLocation) if touchedNode.name == "square"{ Score += 1 touchedNode.removeFromParent() } } } override func update(_ currentTime: TimeInterval) { updatScore() } 

2 Solutions collect form web for “Есть ли способ добавить действие ко всем созданным узлам, кроме одного узла в swift?”

Как объяснил Confused, я думаю, что вы забыли реальную силу enumerateChildNodes (withName:

Действительно, про имя:

Имя для поиска. Это может быть либо буквальное имя узла, либо настраиваемая строка поиска. См. Поиск дерева узлов .

Это означает, что вы также можете:

 self.enumerateChildNodes(withName: "//square*") { node, _ in // node is equal to each child where the name start with "square" // in other words, here you can see square0, square1, square2, square3 etc... if node.name == "square3" { // do whatever you want with square3 } } 

// указывает, что поиск должен начинаться с корневого узла и выполняться рекурсивно по всему дереву узлов. В противном случае он выполняет рекурсивный поиск из своей текущей позиции.

* означает, что поиск соответствует нулю или нескольким символам.

Самый простой способ сделать это – добавить все узлы, в которые вы хотите добавить действия, в массив, затем выполнить итерацию по этому массиву, добавив действия, когда захотите / нуждаетесь.

Это имеет хит памяти, если ваши объекты огромны и сложны, но это самый организованный и быстрый способ сделать это, не используя .name .

И намного быстрее и проще, чем возиться по иерархии узлов с помощью enumerateChildNodes... т. Д.

  • Устаревшие и другие атрибуты методов в Swift, как?
  • Попытка экспортировать в csv, но как я могу реализовать делегат?
  • Как нарисовать текстуру узла Sprite?
  • Инициализатор не переопределяет назначенный инициализатор из своего суперкласса
  • прозрачная панель навигации ios 11
  • Расширение пути и тип файла MIME в быстром
  • Как использовать атрибутный placeholder в iOS с Swift
  • Автоматическая компоновка + размер классов задаются в быстром
  • Быстрая документация Комментарии
  • iAd не отображается асинхронно после вызова метода делегата
  • UICollectionView не прокручивается в нижней части первых нескольких элементов
  • Проверьте, существует ли пользователь с firebase 3.0 + swift
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.