Я не могу заставить космический корабль и врага2 столкнуться. Он не дает визуально или в области отладки никаких признаков того, что он столкнулся.
И то, и другое контролируется касаниями экрана, а остальные нет.
Космический корабль столкнется с врагом и золотой монетой. Враг2 столкнется с врагом.
Я пометил две секции внизу, которые, как мне кажется, вызывают проблему.
Впервые в кодировании, поэтому были бы полезны твердые объяснения с визуальной помощью.
override func didEvaluateActions() {
checkCollisions()
}
func spaceshipHit(goldCoin: SKSpriteNode) {
// added for score jan 13
goldcoinCount += 1
goldCoin.removeFromParent()
}
func spaceshipHit2(enemy: SKSpriteNode) {
enemy.removeFromParent()
}
func spaceshipHit(enemy: SKSpriteNode) {
invincible = true
// added for score attempt jan 13
lives -= 1
print(lives)
enemy.removeFromParent()
let blinkTimes = 10.0
let duration = 3.0
let blinkAction = SKAction.customAction(withDuration: duration) { node, elapsedTime in
let slice = duration / blinkTimes
let remainder = Double(elapsedTime).truncatingRemainder(
dividingBy: slice)
node.isHidden = remainder > slice / 2
}
let setHidden = SKAction.run() { [weak self] in
self?.spaceship.isHidden = false
self?.invincible = false
}
spaceship.run(SKAction.sequence([blinkAction, setHidden]))
}
Это блок кода, который, я думаю, не активируется.
func spaceshipHit(enemy2: SKSpriteNode) {
invincible = true
lives -= 1
print(lives)
let blinkTimes = 10.0
let duration = 3.0
let blinkAction = SKAction.customAction(withDuration: duration) { node, elapsedTime in
let slice = duration / blinkTimes
let remainder = Double(elapsedTime).truncatingRemainder(
dividingBy: slice)
node.isHidden = remainder > slice / 2
}
let setHidden = SKAction.run() { [weak self] in
self?.spaceship.isHidden = false
self?.invincible = false
}
spaceship.run(SKAction.sequence([blinkAction, setHidden]))
}
func checkCollisions() {
var hitGoldCoins: [SKSpriteNode] = []
enumerateChildNodes(withName: "goldCoin") { node, _ in
let goldCoin = node as! SKSpriteNode
if goldCoin.frame.intersects(self.spaceship.frame) {
hitGoldCoins.append(goldCoin)
}
}
for goldCoin in hitGoldCoins {
spaceshipHit(goldCoin: goldCoin)
}
if invincible {
return
}
var hitEnemiesToEnemies: [SKSpriteNode] = []
enumerateChildNodes(withName: "enemy") { node, _ in
let enemy = node as! SKSpriteNode
if node.frame.insetBy(dx: 20, dy: 20).intersects(
self.enemy2.frame) {
hitEnemiesToEnemies.append(enemy)
}
}
for enemy in hitEnemiesToEnemies {
spaceshipHit2(enemy:enemy)
}
var hitEnemies: [SKSpriteNode] = []
enumerateChildNodes(withName: "enemy") { node, _ in
let enemy = node as! SKSpriteNode
if node.frame.insetBy(dx: 20, dy: 20).intersects(
self.spaceship.frame) {
hitEnemies.append(enemy)
}
}
for enemy in hitEnemies {
spaceshipHit(enemy: enemy)
}
if invincible {
return
}
Это еще один подозрительный раздел.
var hitEnemies2: [SKSpriteNode] = []
enumerateChildNodes(withName: "enemy2") { node, _ in
let enemy2 = node as! SKSpriteNode
if enemy2.frame.intersects(
self.spaceship.frame) {
hitEnemies2.append(enemy2)
}
}
// this is the section that trys to get the ship to hit shadow enemy
/*var hitEnemies2: [SKSpriteNode] = []
enumerateChildNodes(withName: "enemy2") { node, _ in
let enemy2 = node as! SKSpriteNode
if node.frame.insetBy(dx: 20, dy: 20).intersects(
self.spaceship.frame) {
hitEnemies2.append(enemy2)
}
}
*/
for enemy2 in hitEnemies2 {
spaceshipHit(enemy2: enemy2)
}
}