2015-04-29 4 views
1

Я хочу обнаружить столкновения с каждой частью спрайта, за исключением прозрачных частей. Я нашел решение для C, но не могу понять, как это сделать быстро.Swift | Игнорировать прозрачные части спрайта при обнаружении столкновений?

Вот решение Obj-C: sprite kit collisions: ignore transparency?

Кто-нибудь есть какие-либо идеи?

EDIT:

Вот мой код функции для построения формы. Я не уверен, как установить spriteName.physicsBody в ответ, указанный ниже другим пользователем.

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)) 


} 
+0

Быстрые примеры в [документации Apple] (https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/index.html#//apple_ref/occ/CLM/SKPhysicsBody/bodyWithTexture: размер :). – Moritz

+0

Вы говорите: init! (Текстура текстуры: SKTexture !, размер: CGSize) -> SKPhysicsBody? Я пытался выяснить, как это использовать. – StudioSevenDesigns

+1

Хм, ты делаешь то же самое, но в быстром ...? Там нет разницы в API, вы просто переписываете код в swift. – Schemetrical

ответ

1

Вы на самом деле можете использовать

init!(texture texture: SKTexture!, size size: CGSize) -> SKPhysicsBody? 

создать тело столкновения с альфа-каналом текстуры вашего спрайта

Однако это не рекомендуется, потому что это стоит много имитирует физическое поведение сложной фигуры.

Если у вас есть спрайт со сложной формой, попробуйте нарисовать еще одну более простую форму и используйте ее текстуру как физическое тело.

+0

Должно ли оно быть помещено в мою функцию для создания фигуры, и должно ли оно быть установлено как тело спрайта. Я добавлю код функции в свой оригинальный пост. – StudioSevenDesigns

+0

@StudioSevenDesigns назначил его как spriteName.physics body – duan

0

Это, безусловно, хорошая идея, чтобы сделать отдельную более упрощенное изображение для физического тела (от цвета и геометрии стенда точке), так как для кода, это очень близко от того, что вам нужно:

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 

Вот full guide how, чтобы сделать это

Смежные вопросы