Я сейчас работаю над маленькой iOS игрой. В текущей итерации 20 целей появляются и перемещаются по стилю космических захватчиков, и вы управляете небольшим кораблем, чтобы стрелять и уничтожать их. Код для моих целей, маркеры корабля игрока и простая функция обнаружения столкновений, которую я написал в промежуточный период, таковы:
class Red_Target: SKSpriteNode{
var game_scene: GameScene!
private var ship_texture: SKTexture!
convenience init(scale: CGFloat, game_world: GameScene){
self.init(texture: SKTexture(imageNamed: "Proto Target"))
self.ship_texture = SKTexture(imageNamed: "Proto Target")
self.setScale(scale)
game_scene = game_world
game_scene.addChild(self)
self.position = CGPoint(x: game_scene.view!.bounds.width/10, y: 9 * game_scene.view!.bounds.height/10)
//self.physicsBody = SKPhysicsBody(texture: ship_texture, size: self.size)
self.physicsBody = SKPhysicsBody(circleOfRadius: 13)
self.physicsBody!.affectedByGravity = false
self.physicsBody!.collisionBitMask = 0x0
self.physicsBody!.categoryBitMask = CollisionType.Enemy.rawValue
self.physicsBody!.contactTestBitMask = CollisionType.Player_Bullet.rawValue
}
func move() {
self.run(space_invaders(scene: game_scene))
}
}
class PC_Bullet: SKSpriteNode{
convenience init(scale: CGFloat){
self.init(imageNamed: "Goodbullet")
self.setScale(scale)
self.physicsBody = SKPhysicsBody(circleOfRadius: 3)
self.physicsBody!.affectedByGravity = false
self.physicsBody!.categoryBitMask = CollisionType.Player_Bullet.rawValue
self.physicsBody!.collisionBitMask = 0x0
self.physicsBody!.contactTestBitMask = CollisionType.Enemy.rawValue
}
}
func didBegin(_ contact: SKPhysicsContact) {
contact.bodyA.node!.removeFromParent()
contact.bodyB.node!.removeFromParent()
}
}
Этот код в своей текущей итерации работает просто отлично. Однако, если строка, определяющая физическое тело цели как ее текстуру, не закомментирована, а линия, определяющая физическое тело как circleOfRadius, удалена, игра будет последовательно обрабатывать sh после уничтожения 5-й цели, утверждая, что didBegin разворачивает нулевое значение. Почему это происходит только с физическими телами с текстурами? Можно ли как-нибудь изменить код, чтобы это работало? Мне бы хотелось иметь возможность позже использовать физическое тело из функции текстуры при работе с более неправильными формами.