2014-03-31 109 views
2

我正在用Xcode的spritekit構建遊戲。它是一款平臺遊戲,現在它可以與平坦的地面部件配合使用。我想知道是否可以忽略png中碰撞的透明度。也就是說,如果我有一個曲面地板和填充槽的透明度的地面部分,我可以讓玩家走過曲線而不是覆蓋整個東西的方形邊界框嗎?我能找到的唯一例子就是Gamemaker GML語言,您可以執行「精確」衝突,從而圖像中的空白空間不會被視爲精靈的一部分。如有必要,我可以提供代碼,但這似乎更像是一個概念性問題。在此先感謝sprite套件碰撞:忽略透明度?

+0

您可以使用+(SKPhysicsBody *)bodyWithPolygonFromPath:(CGPathRef)路徑;.所以是的,這是可能的,看看框架的方法。 – Roecrew

回答

3

嘿是這個在蘋果文檔提供了一個簡單的解決方案。

SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"]; 
sprite.physicsBody = [SKPhysicsBody bodyWithTexture:sprite.texture size:sprite.texture.size]; 

這創建了一個圍繞紋理物理路徑的物理體。

Simulating Physics - SpriteKit Programming Guide

+1

還要注意的是bodyWithTexture:尺寸:只在IOS 8.0及更高版本。 https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/index.html#//apple_ref/occ/clm/SKPhysicsBody/bodyWithTexture:size: – Whirlwind

1

這一切都在你如何實例有問題的節點的physicsBody。

node.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:node.size]; 

可能是製作physicsBody的最簡單,最常用的方法,但也將創造您在上面標識的問題,因爲,對於所有的碰撞目的,該節點是一個矩形。

請查看the documentation for SKPhysicsBody以查看可用的其他選項。 PolygonFromPath和BodyWithBodies可能是最適合你所做的事情的。

+1

http://dazchong.com/spritekit/是一個很好的工具,以幫助使CGPaths多邊形physicsBodies。 – webbcode

0

SKPhysicsBody是正確之舉,只是想指出,這個概念的意思有一個單獨的(簡化)掩碼圖像的SKPhysicsBody來提高你的表現,從顏色和幾何的角度簡化,這裏的驗證碼:

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 

more detailed example/guide