我有 2 个 SKSpriteNode,需要检测其接触。我尝试了各种方法并查找了很多东西,但似乎无法得到答案。下面是我的代码。 controlCircle 是一个类级别变量,因为它需要在其他方法中使用。对象生成得很好。
class GameScene: SKScene, SKPhysicsContactDelegate {
var controlCircle = SKSpriteNode()
var mainCategory : UInt32 = 1 << 0
var dropCategory: UInt32 = 1 << 1
override func didMoveToView(view: SKView) {
self.physicsWorld.contactDelegate = self
self.physicsWorld.gravity = CGVectorMake(0,0)
//CREATING FIRST OBJECT AND ADDING PHYSICS BODY
var mainRadius = 20.0;
var controlCircle = SKSpriteNode(color: UIColor.clearColor(), size:CGSizeMake(mainRadius * 2, mainRadius * 2))
var circleBody = SKPhysicsBody(circleOfRadius: mainRadius)
circleBody.dynamic = false
circleBody.usesPreciseCollisionDetection = true
controlCircle.physicsBody = circleBody
var bodyPath = CGPathCreateWithEllipseInRect(CGRectMake((controlCircle.size.width/2), controlCircle.size.height/2, controlCircle.size.width, controlCircle.size.width),
nil)
var circleShape = SKShapeNode()
circleShape.fillColor = UIColor.brownColor()
circleShape.lineWidth = 0
circleShape.path = bodyPath
controlCircle.addChild(circleShape)
controlCircle.position = CGPointMake(self.frame.width/2, self.frame.height/2)
self.addChild(controlCircle)
controlCircle.physicsBody.categoryBitMask = mainCategory
controlCircle.physicsBody.contactTestBitMask = dropCategory
//CREATING SECOND OBJECT AND ADDING PHYSICS BODY
var radius = 10.0;
var drop = SKSpriteNode(color: UIColor.clearColor(), size:CGSizeMake(radius * 2, radius * 2))
var dropBody = SKPhysicsBody(circleOfRadius: radius)
dropBody.dynamic = false
dropBody.usesPreciseCollisionDetection = true
drop.physicsBody = dropBody
var dropPath = CGPathCreateWithEllipseInRect(CGRectMake((drop.size.width/2), drop.size.height/2, drop.size.width, drop.size.width),
nil)
var dropShape = SKShapeNode()
dropShape.fillColor = UIColor.blackColor()
dropShape.lineWidth = 0
drop.name = "dropMask"
dropShape.path = dropPath
drop.addChild(dropShape)
drop.position = CGPointMake(CGFloat(xValue), self.frame.height-5)
self.addChild(drop)
drop.physicsBody.categoryBitMask = dropCategory
drop.physicsBody.contactTestBitMask = mainCategory
}
func didBeginContact(contact: SKPhysicsContact) -> Void{
NSLog("Hello")
}
}
最佳答案
大家好消息
SKPhysicsBody 文档:
动态属性控制基于体积的实体是否受到重力、摩擦力、与其他对象的碰撞以及直接施加到对象的力或冲量的影响。
因此,这里有一个想法,即在不拖动时实现静止对象,但接收碰撞事件。在 SKSpriteNode 上的 TouchBegan 上,设置其 physicalsBody.dynamic = true
,在 touchUp 上设置其 physicalsBody.dynamic = false
或者,您可以从系统中移除重力,并使所有节点都具有 physicalsBody.dynamic = true
关于ios - didBeginContact 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25007037/