我必须创建一个 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
SKTexture
是您的蛋图像。主体由彩色像素定义。alphaThresHold
:应该成为新物理体一部分的纹素的最小 alpha 值。- 我认为
Size
很清楚。
分析纹理并忽略鸡蛋周围的所有不可见像素,只有颜色像素被解释为 SKPhysicsNode
的主体。
您不应该使用太多这些,因为它们对于物理引擎的计算非常昂贵。
此方法的变体可在 SpriteKit Class Reference 中找到.
关于ios - 如何使用 CGPathRef 创建蛋形物理体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22599378/