Я хочу создать игру, где каждый раз, когда пользователь прикасается, он переключается между одним из двух состояний. Чтобы отслеживать штрихи, я сделал переменную userTouches, которая изменяется от истины до значения false каждый раз, когда пользователь прикасается. Я хочу сделать так, чтобы, если numberOfTouches истинно, он обновляет текстуру до состояния 0; если он неверен, он обновляет текстуру до состояния1. Довольно просто переключение между state0 и state1 для каждого касания.Удаление спрайта в инструкции if с помощью SpriteKit
var userTouches: Bool = true
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
/* Called when a touch begins */
for touch in (touches as! Set<UITouch>) {
userTouches = !userTouches
}
let centered = CGPoint(x: size.width/2, y: size.height/2)
let state0 = SKTexture(imageNamed:"state0")
let state1 = SKTexture(imageNamed:"state1")
var activeState: SKSpriteNode = SKSpriteNode(texture: state0)
//Add new state0 if it's odd, remove old state0 if it's not.
if userTouches == true {
activeState.texture = state0
println("IT'S TRUE")
} else {
activeState.texture = state1
println("IT'S FALSE")
}
self.addChild(activeState)
activeState.name = "state0"
activeState.xScale = 0.65
activeState.yScale = 0.65
activeState.position = centered
}
Когда я запускаю код, новые текстуры добавляются в соответствии с условиями, но старые все еще там. Они добавляются как новые спрайноды в сцене. Я не хочу это. Я ожидал, что он просто переключится между текстурами (state0
и state1
) в spritenode activeState
в зависимости от моей логической переменной. Как я могу переключать свой код между текстурами каждый раз, когда пользователь нажимает, вместо того, чтобы накладывать новые спрайноды друг на друга?
Попробуйте сделать '' println() 'журналы и сообщить нам, что происходит. Как внутри ваших if-утверждений, чтобы убедиться, что они действительно вызваны вообще. Кроме того, я бы не использовал целые числа для условных выражений. Вместо этого я использовал бы булевский язык. По-моему, использование 'true' или' false' намного проще. –
Я отредактировал свой код в соответствии с вашим предложением (логическим), и он все еще имеет схожие проблемы. Я также попытался сделать так, чтобы один spritenode переключался между двумя текстурами, но это, похоже, не работает. Тест 'println()' работал, поэтому я знаю, что на самом деле вызывается инструкция if. Я отправил свой новый код, чтобы помочь вам понять, что происходит. – ntheo
Вы не понимаете основную ошибку. Вы создаете локальные объекты и добавляете их в сцену. В следующий раз вы создадите новый локальный объект и работаете с новым локальным объектом. В вашем коде у вас нет доступа к старому объекту, который был создан на последнем шаге. Проверьте ответ, который я оставил ниже, и попытайтесь понять, что вы делаете неправильно –