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

标签 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];

最佳答案

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

init(texture texture: SKTexture!,alphaThreshold alphaThreshold: CFloat,size size: CGSize) -> SKPhysicsBody
  1. SKTexture 是您的蛋图像。主体由彩色像素定义。
  2. alphaThresHold:应该成为新物理体一部分的纹素的最小 alpha 值。
  3. 我认为 Size 很清楚。

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

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

关于ios - 如何使用 CGPathRef 创建蛋形物理体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22599378/

相关文章:

ios - NSString中的ID出现问题

c++ - 如何删除在 C++ 中使用 ExtAudioFileCreateWithURL 创建的文件?

ios - 具有动画路径内容的 CALayer,使可检查/可设计

ios - 使用给定路径剪切图像

ios - 支持 IPv6-only 网络应该注意什么?

ios - 在 subview 中按下按钮时,应用崩溃

swift - 使用 SKPhysics 在 iPad Pro 12.9 上设置屏幕边界

objective-c - 指定没有动画变化的随机粒子起始颜色?

swift - 移动时如何访问 SKSpriteNode 子类的对象(Swift)

path - 在 Photoshop/Illustrator 中绘制路径,在 iOS 中使用