我一直在阅读这篇关于使用 LibGDX Bullet 包装器的博客文章: http://blog.xoppa.com/using-the-libgdx-3d-physics-bullet-wrapper-part1/
我无法理解有关使用 ContactListener
回调的部分。要创建碰撞回调,您要做的就是使用重写的方法扩展 ContactListener
类,然后实例化它。
无需执行任何其他操作。该代码可以完美运行,无需再次引用该实例。这怎么可能?
最佳答案
这是因为幕后发生的一些事情。子弹包装器通过 JNI 调用子弹。这主要是通过 CollisionJNI
类发生的,该类具有许多静态方法。
当查看source时在 ContactListener
类中,您将看到以下构造函数:
public ContactListener() {
this(false);
if (!setEvents())
throw new com.badlogic.gdx.utils.GdxRuntimeException("Only one method per callback event can be overridden.");
enable();
}
...
public void enable() {
CollisionJNI.ContactListener_enable(swigCPtr, this);
}
如您所见,ContactListener
的构造函数(当您实例化任何扩展它的子类时调用)将自动调用 enable()
,它通过 JNI 注册此实例作为回调监听器。
这里没有黑魔法:=)
如果这会让您感觉更舒服,您可以自己添加对 myContactListener.enable()
的调用。同样,可以调用 myContactListener.disable()
将其关闭。
关于java - LibGDX Bullet 扩展的 ContactListener 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25462954/