我一直在阅读这篇关于使用LibGDX Bullet包装器的博文: http://blog.xoppa.com/using-the-libgdx-3d-physics-bullet-wrapper-part1/
我无法理解有关使用ContactListener
回调的部分。要创建碰撞回调,您只需使用重写方法扩展ContactListener
类,然后实例化它。
不需要做任何其他事情。代码完美无需再次引用实例。这怎么可能?
答案 0 :(得分:2)
这是因为幕后发生的一些事情。子弹包装器通过JNI调用bullet。这主要通过具有许多静态方法的类CollisionJNI
来实现。
查看ContactListener
类的source时,您会看到以下构造函数:
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()
来关闭它。