У меня проблема с SpriteKit и Swift.Swift SKSpriteNode исчезнет, но по-прежнему доступен.
Я добавляю SKSpriteNode
s в разных точках кода к сцене - некоторые из них доступны для кликов, некоторые - нет. Я использую интерактивные узлы как меню для плеера. Так, например, если он нажимает InventoryButtonNode
, он переходит в инвентарь. В инвентаре он может касаться PlayButton и прыгать обратно в игру. Таким образом, первый я добавить узлы:
override func didMoveToView(view: SKView) {
PlayButton = SKSpriteNode(imageNamed: "PlayButton")
PlayButton.size = CGSize(width: 100, height: 100)
PlayButton.position = CGPoint ... // not important
PlayButton.zPosition = 200
PlayButton.name = "PlayButton"
self.addChild(PlayButton)
InventoryButton = SKSpriteNode(imageNamed: "InventoryButton")
InventoryButton.size = CGSize(width: 100, height: 100)
InventoryButton.position = CGPoint ... // different position than PlayButton
InventoryButton.zPosition = 200
InventoryButton.name = "PlayButton"
self.addChild(InventoryButton)
В переопределении FUNC touchesBegan
Я использую это «меню» -nodes, здесь, например, InventoryButton-Node
.
if InventoryButton.containsPoint(touch.locationInNode(self)) {
print("Show Inventory")
ShowInventory()
}
Теперь в функции ShowInventory() я хочу, чтобы удалить эти «меню» -Buttons из поля зрения, так что я могу добавить другие узлы, чтобы показать инвентаризации проигрывателя.
func ShowInventory(){
PlayButton.removeFromParent()
InventoryButton.removeFromParent()
}
Если я создам и запускаю это, узлы будут удалены - или лучше сказать - они станут невидимыми.
Потому что, если я касаюсь сейчас в позиции InventoryButton
, я до сих пор получаю отпечаток «Показать инвентарь» - поэтому функция по-прежнему реагирует на мое прикосновение, даже если узел не виден.
Моя проблема в том, что у меня есть, как 4-х различных функций, таких как ShowInventory()
.. У меня есть ShowGame()
и так далее .. и я хочу в этих функций, чтобы полностью удалить узлы и «Touch» -Возможность ..
мне нужна функция, которая может удалить узлы полностью ..
Я даже пробовал:
func ShowInventory(){
self.removeAllChildren()
}
я серый фон без каких-либо узлов .. но все равно - если я прикасаюсь, где положение инвентаризации Кнопки я получил f unction и печать «Показать инвентарь» ... это расстраивает.
Большое спасибо! Наконец, это работает. Вау - спасибо. .. О, и ваше объяснение велико. – aignetti
Интересно - я думал, что removeFromParent полностью удалил узел, а не просто удалив его из представления. Я использую removeFromParent для кирпичей в моей игре Breakout, и игра затем играет так, как будто кирпич никогда не существовал. (Без столкновений и т. Д.) –
Если вы используете физический движок, удаление узла остановит проверку физики на нем. 'containsPoint' просто спрашивает, находится ли точка в узле с ограничивающим прямоугольником. –