Libgdx 项目符号显示碰撞对象

Posted

技术标签:

【中文标题】Libgdx 项目符号显示碰撞对象【英文标题】:Libgdx bullet show collision objects 【发布时间】:2014-09-21 12:57:45 【问题描述】:

好的,所以我想知道为什么当我运行它时我看不到子弹碰撞对象 Prob.一个菜鸟的错误

    public static PerspectiveCamera cam;
static btCollisionWorld collisionWorld;
DebugDrawer debugDrawer;
public ModelBatch modelBatch;
btCollisionConfiguration collisionConfig;
static btDispatcher dispatcher;
btBroadphaseInterface broadphase;
public static btCollisionShape voxelShape;
public static Model model;
public static ModelInstance test;
public static btCollisionShape collisiontest;
public static btCollisionObject collisiontestobject;

@Override
public void create () 
    Bullet.init();
    collisionConfig = new btDefaultCollisionConfiguration();
    dispatcher = new btCollisionDispatcher(collisionConfig);
    broadphase = new btDbvtBroadphase();
    collisionWorld = new btCollisionWorld(dispatcher, broadphase, collisionConfig);

    cam = new PerspectiveCamera(67, 1280, 720);
    cam.position.set(10f,10f,10f);
    cam.lookAt(0,0,0);
    cam.near = 1f;
    cam.far = 300f;
    cam.update();

    modelBatch = new ModelBatch();


    ModelBuilder modelBuilder = new ModelBuilder();
    model = modelBuilder.createBox(3f, 3f, 3f,
            new Material(ColorAttribute.createDiffuse(Color.BLUE)),
            Usage.Position | Usage.Normal);

    test = new ModelInstance(model);

    test.transform.setTranslation(0,0,0);

    collisiontest = new btBoxShape(new Vector3 (6f,6f,6f));

    collisiontestobject = new btCollisionObject();
    collisiontestobject.setCollisionShape(collisiontest);
    collisiontestobject.setWorldTransform(new Matrix4());

    debugDrawer = new DebugDrawer();
    debugDrawer.setDebugMode(btIDebugDraw.DebugDrawModes.DBG_MAX_DEBUG_DRAW_MODE);

    collisionWorld.setDebugDrawer(debugDrawer);




@Override
public void render () 

    cam.update();


    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);


    debugDrawer.begin(cam);
    collisionWorld.debugDrawWorld();
    debugDrawer.end();

    //modelBatch.begin(cam);
    //modelBatch.render(test);
    //modelBatch.end();



当我运行它时,我希望看到碰撞对象的框架,但我什么也看不到...... 这是我创建的一个测试程序,因为有很多子弹问题...... p>

【问题讨论】:

【参考方案1】:

你做的一切都是正确的,只有一件事是缺失的:

collisionWorld.addCollisionObject(collisiontestobject);

创建对象后,还需要将其添加到碰撞世界中。这就是DebugDrawer 不渲染任何东西的原因。它根本不知道这个对象。

【讨论】:

0.0 先生您帮了我这么多我想这就是为什么我一直有这么多的子弹问题!我从未将它添加到世界 0.0。 再次非常感谢您!

以上是关于Libgdx 项目符号显示碰撞对象的主要内容,如果未能解决你的问题,请参考以下文章

在 LIBGDX 中初始化时碰撞位达到最大值

使用不支持我的 JDK 版本 (17) 的 Gradle 6.7.1 的 LibGDX 项目创建工具

2D 项目中的对象不碰撞

使用 ng-repeat 显示包含重复对象的对象子数组列表,每个索引有 1 个项目符号

是否可以在不使用其 LibGDX 项目生成器的情况下使用 badlogic(LibGDX) 创建项目?

为没有Box2D的libgdx Actors实现冲突检测