交互时删除节点 Spritekit
Delete Nodes Spritekit when interact
我的视野中心有一个圆圈。被称为 enemyBall 的圆圈与它发生碰撞。我想检测这些碰撞,然后从视图中移除 enemyBalls。
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
现在我该怎么办
声明 SKPhysicsContactDelegate
class GameScene: SKScene, **SKPhysicsContactDelegate** {
...
}
有联系人时会调用此委托方法:
func didBegin(_ contact: SKPhysicsContact) {
...
}
删除节点
enemyBall.removeFromParent()
我对 swift 比较陌生,所以我想用 objective 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.
}
挖通后好了。这是最适合我的方法,因为我随机生成了 enemyBalls。
func didBegin(_ contact: SKPhysicsContact) {
contact.bodyB.node?.removeFromParent()
}
据我所知,Body B 将成为 enemyBall,因此我访问了它的节点,然后将其删除。
简单地使用删除了一些节点。
enemyBall.removeFromParent()
谢谢@DeepakRastogi 和@JPAquino
我的视野中心有一个圆圈。被称为 enemyBall 的圆圈与它发生碰撞。我想检测这些碰撞,然后从视图中移除 enemyBalls。
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
现在我该怎么办
声明 SKPhysicsContactDelegate
class GameScene: SKScene, **SKPhysicsContactDelegate** {
...
}
有联系人时会调用此委托方法:
func didBegin(_ contact: SKPhysicsContact) {
...
}
删除节点
enemyBall.removeFromParent()
我对 swift 比较陌生,所以我想用 objective 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.
}
挖通后好了。这是最适合我的方法,因为我随机生成了 enemyBalls。
func didBegin(_ contact: SKPhysicsContact) {
contact.bodyB.node?.removeFromParent()
}
据我所知,Body B 将成为 enemyBall,因此我访问了它的节点,然后将其删除。 简单地使用删除了一些节点。
enemyBall.removeFromParent()
谢谢@DeepakRastogi 和@JPAquino