首先,我要感谢本网站上的每个用户,因为我总是在这里找到解决方案,这太有用了!
我正在尝试使用SpriteKit制作像Xonix,Bix或Jezzball这样的游戏.无论如何,我有一个球在墙壁上弹跳,我试图在无法前进的地方制造障碍物,这些障碍物是由CGPathref制造的(用户通过其动作制作它)
我正在使用bodyWithPolygonFromPath来创建skspritenode的物理体,它正在工作,但并非总是如此.我已经下载了YMCPhysicsDebugger以查看身体的内容,并且在每种情况下,它都很好,但是我已经看到当我在CGPath上有超过4个点时,球不会碰到整个身体,它只碰撞一个较小的区域..我已经尝试和搜索了很多没有任何结果..我试图逆时针制作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];
Run Code Online (Sandbox Code Playgroud)
这是我的"游戏"的两张照片,第一张照片正常,球反弹回来.第二个不能正常工作,只检测上部碰撞.
我还尝试检测球何时进入更新功能中的障碍物以手动使其反弹,但当然,它并没有真正起作用.加上我的数学研究不是那么好
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++;
}
Run Code Online (Sandbox Code Playgroud)
每次CGPath有超过4分时我也想过制作几个SKSpriteNode,但我真的不知道如何在数学中做到这一点.
无论如何,这是一个很长的帖子,我希望你们中的一些人能够全部阅读并理解这一切(对不起我的英语,我是法国人!)而且最重要的是,能够帮助我!
非常感谢你