如何用CGPathRef创建蛋形物理体?

时间:2014-03-24 01:01:12

标签: ios sprite-kit cgpath skphysicsbody

egg path

我必须创建一个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];

1 个答案:

答案 0 :(得分:1)

有一种更好的方法可以做到这一点。用p.e.制作蛋的质地。 Adobe Illustrator并使用此方法:

init(texture texture: SKTexture!,alphaThreshold alphaThreshold: CFloat,size size: CGSize) -> SKPhysicsBody
  1. SKTexture是你的蛋形象。正文由彩色像素定义。
  2. alphaThresHold:应该成为新物理主体一部分的纹素的最小alpha值。
  3. 我认为Size很清楚。
  4. 分析纹理,忽略蛋周围的所有不可见像素,只将颜色像素解释为SKPhysicsNode的主体。 你不应该使用太多这些,因为它们的物理引擎计算成本非常高。

    此方法的变体可在SpriteKit Class Reference

    中找到