gpt4 book ai didi

c# - BulletSharp 在应用程序退出时崩溃

转载 作者:行者123 更新时间:2023-12-03 15:56:30 24 4
gpt4 key购买 nike

这个问题不太可能帮助任何 future 的访客;它只与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这些情况通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the help center .




9年前关闭。




使用以下启动:

        BulletSharp.DefaultCollisionConstructionInfo collisionConstructionInfo =
new BulletSharp.DefaultCollisionConstructionInfo();
BulletSharp.DefaultCollisionConfiguration collisionConfiguration =
new BulletSharp.DefaultCollisionConfiguration(
collisionConstructionInfo );
BulletSharp.Dispatcher collisionDispatcher =
new BulletSharp.CollisionDispatcher(
collisionConfiguration );
BulletSharp.BroadphaseInterface broadPhaseCollisionInterface =
new BulletSharp.SimpleBroadphase( );
BulletSharp.CollisionWorld bulletCollisionWorld =
new BulletSharp.CollisionWorld(
collisionDispatcher,
broadPhaseCollisionInterface,
collisionConfiguration );

BulletSharp.ConstraintSolver constraintSolver =
new BulletSharp.SequentialImpulseConstraintSolver();
BulletSharp.DynamicsWorld bulletDynamicsWorld =
new BulletSharp.DiscreteDynamicsWorld(
collisionDispatcher,
broadPhaseCollisionInterface,
constraintSolver,
collisionConfiguration );

每秒运行 60 次:
bulletDynamicsWorld.StepSimulation( (float)deltaTime, 9, 1.0F / 40.0F );

然后在退出某个任意点时调用它们:
        Utility.SafeDispose( bulletDynamicsWorld );
Utility.SafeDispose( constraintSolver );
Utility.SafeDispose( broadPhaseCollisionInterface );
Utility.SafeDispose( collisionDispatcher );
Utility.SafeDispose( collisionConfiguration );
Utility.SafeDispose( bulletCollisionWorld ); <<< The error happens here >>>

执行突出显示的行时出现以下错误:

“运行时遇到 fatal error 。错误地址位于线程 0x1378 上的 0x6b1c9704。错误代码为 0xc0000005。此错误可能是 CLR 中的错​​误,也可能是用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM-interop 或 PInvoke 的用户编码(marshal)错误,这可能会损坏堆栈。”

笔记:

1)这就是所有的项目符号代码。未添加任何碰撞对象或动态对象。

2) Utility.SafeDispose() 采用 IDiposable,检查空值,如果有效则调用 .Dispose()。

3)语言是C#,说清楚。

4) Utility.SafeDispose( CollisionWorld ) 在 .SafeDispose 语句列表中的位置似乎没有效果。

为什么会崩溃,我该如何解决?

谢谢。

最佳答案

在处理 bulletCollisionWorld 时,它将访问 broadPhaseCollisionInterface 以清除世界创建的任何碰撞对。由于您在处置世界之前显式处置了冲突接口(interface),因此世界将访问无效指针。

所以解决方案是先处理两个世界,然后处理碰撞接口(interface)。

关于c# - BulletSharp 在应用程序退出时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13091501/

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