首页 文章

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

提问于
浏览
3

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 回答

  • 1

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

    init(texture texture: SKTexture!,alphaThreshold alphaThreshold: CFloat,size size: CGSize) -> SKPhysicsBody
    
    • SKTexture 是你的蛋形象 . 主体由彩色像素定义 .

    • alphaThresHold :应该是新物理主体一部分的纹素的最小alpha值 .

    • 我认为 Size 很清楚 .

    分析纹理,忽略蛋周围的所有不可见像素,只将颜色像素解释为 SKPhysicsNode 的主体 . 您不应该使用太多这些,因为它们对于物理引擎的计算非常昂贵 .

    可以在SpriteKit Class Reference中找到此方法的变体 .

相关问题