iOS - bodyWithPolygonFromPath: тело совпадает с путем, но столкновения не работают должным образом

Во-первых, я хотел бы сказать спасибо всем пользователям на этом сайте, потому что я всегда нахожу решения здесь, и это очень полезно!

Я пытаюсь сделать игру вроде Xonix, Bix или Jezzball с помощью SpriteKit. Во всяком случае, у меня мяч отскакивает от стен, и я пытаюсь создать препятствия, которые он не может сделать, эти препятствия сделаны из CGPathref (пользователь делает это своими движениями)

Я использую bodyWithPolygonFromPath для создания физического тела skspritenode, оно работает, но не всегда. Я скачал YMCPhysicsDebugger, чтобы увидеть содержимое тела, и в каждом случае это хорошо, но я видел, что, когда у меня больше 4 очков на CGPath, шар не сталкивается со всем телом, он сталкивается только с меньшей зоной ... Я пытался и искал много, но безрезультатно ... Я пытался сделать точки CGPath против часовой стрелки, это не работает так же хорошо, даже с другой стороны ...

Я копирую вам код для создания SKSpriteNode, но я сомневаюсь, что это будет полезно, я думаю, что проблема с моими точками, возможно, мне нужно больше объяснений о том, как физическое тело работает с многоугольником

SKSpriteNode *zone = [SKSpriteNode spriteNodeWithColor:[UIColor redColor] size:CGSizeMake(50, 50)];
zone.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path.CGPath]; // 1
zone.physicsBody.friction = 0.0f;
zone.physicsBody.restitution = 0.0f;
zone.physicsBody.linearDamping = 0.0f;
zone.physicsBody.allowsRotation = NO;
zone.physicsBody.categoryBitMask = wallsCategory;
zone.physicsBody.dynamic = NO; // 2
[self addChild:zone];

Вот две картинки моей «игры», первая работает, мяч отскакивает прямо против нее. Второй работает не так, как должен, обнаружена только верхняя часть для столкновения.

http://hpics.li/86a69e2

http://hpics.li/e16d18e

Я также пытался определить, когда мяч входит в препятствие в функции обновления, чтобы вручную отразить его, но, конечно, он не работает. Плюс мои занятия математикой не так хороши, лол

for(SKSpriteNode *zone in zonesTab) 
{
    UIBezierPath *path = [zoneesTab objectAtIndex:i]; // Array of UIBezierPath for the obstacles
    if(CGPathContainsPoint(path.CGPath, NULL, ball.frame.origin, FALSE)) 
    {
        ball.physicsBody.velocity=CGVectorMake(ball.physicsBody.velocity.dx*-1, ball.physicsBody.velocity.dy*-1);
        NSLog(@"Touches iT");
    }
    i++;

}

Я также думал о создании нескольких SKSpriteNode каждый раз, когда CGPath имеет более 4 баллов, но я действительно не знаю, как это сделать в математике.

В любом случае, это длинный пост, я надеюсь, что некоторые из вас прочитают все это и поймут все это (извините за мой английский, я французский!) И, прежде всего, сможете мне помочь !!

большое спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос