Swift 斯威夫特|在检测碰撞时忽略精灵的透明部分?
我想检测精灵每个部分的碰撞,除了透明部分。我找到了C语言的解决方案,但我不知道如何在swift中实现 以下是Obj-C解决方案: 有人知道吗 编辑: 这是我构建形状的函数代码。我不确定如何将spriteName.physicsBody设置为其他用户提供的以下答案Swift 斯威夫特|在检测碰撞时忽略精灵的透明部分?,swift,transparency,transparent,ignore,collision,Swift,Transparency,Transparent,Ignore,Collision,我想检测精灵每个部分的碰撞,除了透明部分。我找到了C语言的解决方案,但我不知道如何在swift中实现 以下是Obj-C解决方案: 有人知道吗 编辑: 这是我构建形状的函数代码。我不确定如何将spriteName.physicsBody设置为其他用户提供的以下答案 func addTriangles() { center = SKSpriteNode(imageNamed:"images/center.png") center.position = CGPoint(x: CG
func addTriangles() {
center = SKSpriteNode(imageNamed:"images/center.png")
center.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))
center.zPosition = -1
center.physicsBody = init!(texture centerTexture: SKTexture!, size 1.0: CGSize) -> SKPhysicsBody?
center.physicsBody?.dynamic = false
center.physicsBody?.affectedByGravity = false
center.physicsBody?.categoryBitMask = PhysicsCategory.Triangle
self.addChild(center)
spin = clockwise
center.runAction(SKAction.repeatActionForever(spin))
}
你实际上可以使用
init!(texture texture: SKTexture!, size size: CGSize) -> SKPhysicsBody?
使用精灵纹理的alpha通道设置碰撞体
但是,不建议这样做,因为模拟复杂形状的物理行为需要花费大量成本
如果您有一个形状复杂的精灵,请尝试绘制另一个更简单的形状,并使用其纹理作为物理体。为物理体绘制一个单独的更简化的图像(从颜色和几何角度)绝对是一个好主意,至于代码,它与您需要的非常接近:
let birdMask: UInt32 = 0x1 << 0
let pipeMask: UInt32 = 0x1 << 1
//...
pipeImage = SKSpriteNode(imageNamed: "realImage")
//... size and position
let maskTexture = SKSpriteNode(imageNamed: mask)
maskTexture.size = pipeImage!.size // size of texture w/ real imageNamed
pipeImage!.physicsBody?.usesPreciseCollisionDetection = true
pipeImage!.physicsBody = SKPhysicsBody(texture: maskTexture.texture!, size: size)
pipeImage!.physicsBody?.affectedByGravity = false // disable falling down...
pipeImage!.physicsBody?.allowsRotation = false
pipeImage!.physicsBody?.isDynamic = true
pipeImage!.physicsBody?.friction = 0
pipeImage!.physicsBody?.categoryBitMask = pipeMask
pipeImage!.physicsBody?.collisionBitMask = birdMask | pipeMask
pipeImage!.physicsBody?.contactTestBitMask = birdMask | pipeMask
让birdMask:UInt32=0x1在中有Swift示例。你是说:init!(纹理:SKTexture!,大小:CGSize)->SKPhysicsBody?我一直在想如何使用它。嗯,你也做同样的事情,但是用swift。。。?没有API的区别,您只需用swift重写代码。它是否应该放在我构建形状的函数中,是否应该设置为spriteName.physics body?我将把函数代码添加到我原来的帖子中。@StudioSevenDesigns将其设置为spriteName.physics body