我必须创建一个CGPathRef来模拟Sprite Kit中的物理属性。
我正在尝试通过一半圆形加一半椭圆形来创建一个蛋形路径。 鸡蛋比例为0.4(半圆底部)至0.6(半椭圆形上部); 但是,我不知道为什么一无所获。 以下代码是路径的创建:
self.egg = [SKSpriteNode spriteNodeWithImageNamed:IMAGE_NAME_EGG];
[self.egg setScale:0.2];
self.egg.position = CGPointMake(self.size.width/2,self.size.height - self.egg.size.height/2);
self.egg.name = IMAGE_NAME_EGG;
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, NULL, 0, self.egg.size.height*0.4, self.egg.size.width/2, M_PI, M_PI_2, NO);
CGPathAddEllipseInRect(path, NULL, self.egg.frame);
self.egg.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromPath:path];
self.egg.physicsBody.dynamic = YES;
self.egg.physicsBody.categoryBitMask = eggCategory;
self.egg.physicsBody.contactTestBitMask = floorCategory;
self.egg.physicsBody.collisionBitMask = floorCategory;
//self.eggCanMove = NO;
self.egg.physicsBody.allowsRotation = YES;
[self addChild:self.egg];
答案 0 :(得分:1)
有一种更好的方法可以做到这一点。用p.e.制作蛋的质地。 Adobe Illustrator并使用此方法:
init(texture texture: SKTexture!,alphaThreshold alphaThreshold: CFloat,size size: CGSize) -> SKPhysicsBody
SKTexture
是你的蛋形象。正文由彩色像素定义。alphaThresHold
:应该成为新物理主体一部分的纹素的最小alpha值。Size
很清楚。分析纹理,忽略蛋周围的所有不可见像素,只将颜色像素解释为SKPhysicsNode
的主体。
你不应该使用太多这些,因为它们的物理引擎计算成本非常高。
此方法的变体可在SpriteKit Class Reference。
中找到