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];
Вот две картинки моей «игры», первая работает, мяч отскакивает прямо против нее. Второй работает не так, как должен, обнаружена только верхняя часть для столкновения.
Я также пытался определить, когда мяч входит в препятствие в функции обновления, чтобы вручную отразить его, но, конечно, он не работает. Плюс мои занятия математикой не так хороши, лол
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 баллов, но я действительно не знаю, как это сделать в математике.
В любом случае, это длинный пост, я надеюсь, что некоторые из вас прочитают все это и поймут все это (извините за мой английский, я французский!) И, прежде всего, сможете мне помочь !!
большое спасибо