Удалить узлы Spritekit при взаимодействии
У меня есть круг в центре моего зрения. Круги, известные как враг, приходят и сталкиваются с ним. Я хочу обнаружить эти столкновения и затем удалить вражеские шары из поля зрения.
func generateEnemyBall () {
let enemyBall = SKSpriteNode()
let randomColor = Int((arc4random_uniform(UInt32(circleTextures.count))))
enemyBall.texture = SKTexture(imageNamed: circleTextures[randomColor])
enemyBall.size = CGSize(width: mainCircle.size.width / 5, height: mainCircle.size.width / 5)
enemyBall.physicsBody = SKPhysicsBody(circleOfRadius: enemyBall.size.width / 2)
enemyBall.physicsBody?.affectedByGravity = false
let quadrant = Int(arc4random_uniform(UInt32(3)))
enemyBallForce = -CGFloat(arc4random_uniform(UInt32(100)))
switch quadrant {
case 0:
enemyBall.position = CGPoint(x: self.frame.maxX - 20, y: self.frame.maxY - 100)
self.addChild(enemyBall)
let dx = (enemyBall.position.x) - mainCircle.position.x
let dy = (enemyBall.position.y) - mainCircle.position.y
let impulse = applyImpulse(dx: dx, dy: dy)
enemyBall.physicsBody?.applyImpulse(CGVector(dx: enemyBallForce * impulse.dx, dy: enemyBallForce * impulse.dy))
break
Что мне теперь делать?
3 ответа
Я немного новичок в стремлении, поэтому я хотел бы ответить на ваш вопрос, используя цель C.
В didMoveToView добавить:
self.physicsWorld.contactDelegate = self;
добавить еще несколько свойств в ваш вражеский мяч, т.е.
enemyball.physicsBody.categoryBitMask = ballhitcategory;
enemyball.physicsBody.collisionBitMask = ballhitcategory;
enemyball.physicsBody.contactTestBitMask = ballhitcategory;
где ballhitcategory может быть любым целым значением без знака.
Затем в делегатном методе didBeginContact:
-(void)didBeginContact:(SKPhysicsContact *)contact
{
SKPhysicsBody *body1,*body2;
body1 = contact.bodyA;
body2 = contact.bodyB;
//Do your ball removal here.
}
Объявить SKPhysicsContactDelegate
class GameScene: SKScene, **SKPhysicsContactDelegate** {
...
}
Этот метод делегата вызывается, когда есть контакт:
func didBegin(_ contact: SKPhysicsContact) {
...
}
Удалить узел
enemyBall.removeFromParent()
Хорошо после того, как копаться. Это то, что работало лучше всего для меня, так как я генерировал вражеские шары случайно.
func didBegin(_ contact: SKPhysicsContact) {
contact.bodyB.node?.removeFromParent()
}
Тело B, как я знаю, должно было стать врагом, поэтому я получил доступ к его узлу, а затем удалил его. Просто используя удаленные некоторые узлы.
enemyBall.removeFromParent()
Спасибо @DeepakRastogi и @JPAquino