Spa*_*Dog 4 iphone ipad ios sprite-kit
我有这个对象,它有一个从路径创建的物理主体。
整个场景区域(=整个屏幕)本身就是该对象不应逃离的边界。
该场景的边界定义为
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
Run Code Online (Sandbox Code Playgroud)
一切都几乎按预期进行。物体在边缘上碰撞和弹跳,大部分时间都受到边缘的约束,但如果你坚持几次,以高冲力向边缘发射物体,物体最终会不尊重边缘并逃脱,可能是什么又一个 SpriteKit 错误。
对象的类初始化是这样的:
self.physicsBody.dynamic = YES;
CGFloat offsetX = self.frame.size.width/2.0f;
CGFloat offsetY = self.frame.size.height/2.0f;
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 60 - offsetX, 79 - offsetY);
CGPathAddLineToPoint(path, NULL, 96 - offsetX, 69 - offsetY);
CGPathAddLineToPoint(path, NULL, 124 - offsetX, 44 - offsetY);
CGPathAddLineToPoint(path, NULL, 120 - offsetX, 23 - offsetY);
CGPathAddLineToPoint(path, NULL, 85 - offsetX, 0 - offsetY);
CGPathAddLineToPoint(path, NULL, 62 - offsetX, 3 - offsetY);
CGPathAddLineToPoint(path, NULL, 37 - offsetX, 19 - offsetY);
CGPathAddLineToPoint(path, NULL, 12 - offsetX, 29 - offsetY);
CGPathAddLineToPoint(path, NULL, 3 - offsetX, 39 - offsetY);
CGPathAddLineToPoint(path, NULL, 7 - offsetX, 58 - offsetY);
CGPathAddLineToPoint(path, NULL, 27 - offsetX, 46 - offsetY);
CGPathAddLineToPoint(path, NULL, 36 - offsetX, 61 - offsetY);
CGPathCloseSubpath(path);
self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];
self.physicsBody.restitution = 0.0f;
self.physicsBody.usesPreciseCollisionDetection = YES;
Run Code Online (Sandbox Code Playgroud)
我可以采取哪些措施来检测并防止对象离开屏幕?
谢谢。
我没有追踪这些点,但看起来您要么有一个非凸多边形,要么有一个顶点不遵循逆时针缠绕的多边形,或两者都有。确保形状是凸形的,并且顶点顺序(缠绕)是逆时针顺序。
如果此形状旨在成为仅用于碰撞检测的静态(非移动)物体,则可以使用bodyWithEdgeLoop或者bodyWithEdgeChain在缠绕和凸形形状不重要的情况下使用。
PS:不要忘记释放路径:
CGPathRelease(path);
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1255 次  |  
        
|   最近记录:  |