gpt4 book ai didi

ios - SpriteKit - physicsBody 不尊重边缘

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:44 25 4
gpt4 key购买 nike

我有这个对象,它有一个从路径创建的 physicsBody。

整个场景区域(=整个屏幕)本身就是该对象不应逃脱的边界。

这个场景的边界定义为

self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];

一切几乎都按预期进行。物体在边缘碰撞和弹跳,大部分时间都受到边缘的约束,但如果你坚持几次,以高脉冲向边缘发射物体,物体最终会不尊重边缘并逃脱,这可能是什么又一个 SpriteKit 错误。

对象的类init是这样的:

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;

我可以采取什么措施来检测并防止物体离开屏幕?

谢谢。

最佳答案

我没有追踪这些点,但看起来你有一个 non-convex polygon或顶点不遵循逆时针缠绕的顶点,或两者兼而有之。确保形状是凸的,顶点顺序(缠绕)是逆时针顺序。

如果此形状旨在成为仅用于碰撞检测的静态(非移动)物体,您可以使用 bodyWithEdgeLoopbodyWithEdgeChain,其中缠绕和凸形不适用

PS:别忘了释放路径:

CGPathRelease(path);

关于ios - SpriteKit - physicsBody 不尊重边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21755060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com