Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c SpriteKit:物理多边形错误_Objective C_Macos_Sprite Kit - Fatal编程技术网

Objective c SpriteKit:物理多边形错误

Objective c SpriteKit:物理多边形错误,objective-c,macos,sprite-kit,Objective C,Macos,Sprite Kit,我正在尝试使用CGPath中的多边形初始化SKPhysicsBody。 它应该是这样的: 我的代码路径配置如下: -(CGPathRef)GetStarPath{ //Draw Object 1 { //Create Path CGMutablePathRef path = CGPathCreateMutable(); CGPoint pos = CGPointMake(177, 184.42); //Center Posi

我正在尝试使用
CGPath
中的多边形初始化
SKPhysicsBody
。 它应该是这样的:

我的代码路径配置如下:

-(CGPathRef)GetStarPath{



    //Draw Object 1
    {
        //Create Path
        CGMutablePathRef path = CGPathCreateMutable();
        CGPoint pos = CGPointMake(177, 184.42); //Center Position
        CGAffineTransform trans = CGAffineTransformMake(1, 0, 0, 1, pos.x, pos.y); //Transform of object
        { //SubPath 0
            CGFloat d[] = {-3.0518e-05,-14.924,-3.0518e-05,-14.924,4.8492,-5.0988,4.8492,-5.0988, 4.8492,-5.0988,4.8492,-5.0988,15.692,-3.5232,15.692,-3.5232, 15.692,-3.5232,15.692,-3.5232,7.8462,4.125,7.8462,4.125, 7.8462,4.125,7.8462,4.125,9.6983,14.924,9.6983,14.924, 9.6983,14.924,9.6983,14.924,-9.1553e-05,9.8256,-9.1553e-05,9.8256, -9.1553e-05,9.8256,-9.1553e-05,9.8256,-9.6986,14.924,-9.6986,14.924, -9.6986,14.924,-9.6986,14.924,-7.8463,4.1249,-7.8463,4.1249, -7.8463,4.1249,-7.8463,4.1249,-15.692,-3.5234,-15.692,-3.5234, -15.692,-3.5234,-15.692,-3.5234,-4.8492,-5.0989,-4.8492,-5.0989, -4.8492,-5.0989,-4.8492,-5.0989,-3.0518e-05,-14.924,-3.0518e-05,-14.924 };
            CGPathMoveToPoint(path, &trans, d[0], d[1]);
            for(int i=0; i<10; i++)
            {
                CGPathAddCurveToPoint(path, &trans, d[i*8+2], d[i*8+3], d[i*8+4], d[i*8+5], d[i*8+6], d[i*8+7]);
            }
            CGPathCloseSubpath(path);
        }

        return path;
    }



}
-(CGPathRef)GetStarPath{
//绘制对象1
{
//创建路径
CGMutablePathRef path=CGPathCreateMutable();
CGPoint pos=CGPointMake(177184.42);//中心位置
CGAffineTransform trans=CGAffineTransformMake(1,0,0,1,pos.x,pos.y);//对象的变换
{//子路径0
cgd[]=5.924,4.8492,4.8492,4.8492,4.8492,4.8492,4.8492,5.0988,4.8492,5.0988,4.8492,4.8492,5.8492,5.0988,5.055,5.0518,5.0518,5.0518,5.0518,5.0518,5,5.0518,5.0518,5.0518,5,5.0518,5.0518,5,5.0518,5.0518,5,5,5.0518,5.0518,5,5,5.0518,5.0518,5,5,5.0518,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5.055,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,E-05,9.8256,-9.1553e-05,9.8256,-9.1553e-05,9.8256,-9.1553e-05,9.8256,9.82569.6986,9.6986,9.6986,9.6986,14.924,9.6986,9.6986,14.924,14.924,9.924,7.849,7.849,7.846,7.6986,7.6986,9.6986,9.6986,9.6986,9,9.6986,14.6986,9,14.6986,14,14.929,14,14,9,14.924,14,14,14.924,7.924,7,7,9,7.849,7.849,7,7.849,7.849,7,7,7.849,7,7,7,7,7,7.849,9,7.849,7,9,7,9,7.849,7,7,9,9,7.849,9,9,9,9,9,9,9,7};
CGPathMoveToPoint(路径和事务,d[0],d[1]);
对于(int i=0;i 1.19209290e-7F*
1.19209290e-7F),函数集,文件/SourceCache/PhysicsKit/PhysicsKit-4.6/PhysicsKit/Box2D/Collision/Shapes/b2PolygonShape.cpp,
第176行

(异常断点停止在
[SKPhysicsBody WithPolygonFromPath:star_path];


感谢您的帮助。

首先,底层的Box2d错误消息指出,您的一个维度太小,无法处理。

第二,创建星形实体将导致意外行为-正如在“
bodyWithPolygonFromPath:
中所述,
将只接受多边形的凸面路径(多边形内部没有超过180度的角度-您的星形有5个)。它也应该没有自相交,并且绕组预期为逆时针方向。



如果恒星足够小,可以尝试使用圆形物理体(
bodyWithCircleOfRadius:
)下面是一个近似值。如果你坚持要有一个星体对象,你可以尝试将多个物理体作为子对象添加到一个节点,以得到一个星体:一个五角大楼和5个三角形连接到它。

好的,谢谢。这是物理引擎中的常见限制吗?这些基本上是Box2d特有的限制,它是集成到Sprite工具包中(尽管Box2d对每个多边形有8个顶点的严格限制,据我记忆所及)。