Flutter 颤振-火焰引擎|碰撞:当物体速度/速度较高时,碰撞不发生';t触发器

Flutter 颤振-火焰引擎|碰撞:当物体速度/速度较高时,碰撞不发生';t触发器,flutter,flame,Flutter,Flame,我做了一些测试,我看到当一个物体有很高的速度时,碰撞不会触发 在Flame doc的注释()上: 请注意,内置碰撞检测系统不需要 两个点击框之间的碰撞,相互超越进入 当他们移动太快或更新太快时,可能会发生这种情况 使用较大的增量时间进行调用(例如,如果您的应用程序没有 在前景中)。如果您愿意,这种行为称为隧道 阅读更多关于它的信息。我很想看到有人谈论这件事 我们如何才能避免这种情况!有一种很好的方法可以解决这类问题 事情 我意识到一些其他的测试 如果修改角度,将触发碰撞。(我不知道为什么它不会掩

我做了一些测试,我看到当一个物体有很高的速度时,碰撞不会触发

在Flame doc的注释()上:

请注意,内置碰撞检测系统不需要 两个点击框之间的碰撞,相互超越进入 当他们移动太快或更新太快时,可能会发生这种情况 使用较大的增量时间进行调用(例如,如果您的应用程序没有 在前景中)。如果您愿意,这种行为称为隧道 阅读更多关于它的信息。我很想看到有人谈论这件事 我们如何才能避免这种情况!有一种很好的方法可以解决这类问题 事情

我意识到一些其他的测试

如果修改角度,将触发碰撞。(我不知道为什么它不会掩盖这一点)

更新函数(用于修改Y值)如下所示:

@覆盖
无效更新(双dt){
超级更新(dt);
y=y+_*dt-_重力*dt*dt/2;
_速度+=_重力*dt;
角度=速度(速度);
}
例如:

在这个gif上,你可以看到立方体有一个形状(HitboxRectangle)和绿色的地板。 但对撞机不会触发。只有在我“跳”到hitbox时才会触发

另一方面,滞后的视觉/动画只是因为它是gif


编辑: 我意识到一些其他的测试

如果修改了角度,则更有可能触发碰撞。看起来它现在很管用。(我不知道为什么)

假设你有一个函数,在更新时根据你的真实当前角度返回一个角度,然后你添加一个随机数来添加当前角度的微小变化

角度随机化器非常小,甚至不可见。(至少在画布上)

。。。
var rng=(new Random().nextInt(4)-2)/1000;
返回角+rng;
我真的不喜欢那种奇怪的解决方案。。但它是有效的!
也许这有助于发现原因和更好的解决方案。

rc9中有一个关于碰撞检测的错误,这在rc10(或我们今天发布的rc11)中应该可以正常工作。您的组件移动速度不够快,无法错过整个碰撞检查

请注意,在您的pubspec文件中,您不能指定
^1.0.0-rc10
,因为pub将rc10视为低于rc10,因此您必须明确地说
1.0.0-rc10
(没有
^

编辑:rc11现已发布,因此现在您可以再次使用^

dependencies:
  ...
  flame: ^1.0.0-releasecandidate.11

你是用rc10跑的吗?我修复了一些关于碰撞检测的错误。这看起来不够快,不会引发碰撞。就是这样!它现在工作得很好!不再需要角度随机化器了哈哈^我不冒险,直接跳到1.0.0-releasecandidate.11:)