JMonkey选择广场并发症

时间:2014-02-06 06:27:07

标签: camera jmonkeyengine

我创建了一种在单击并拖动鼠标时在屏幕上绘制选择框的方法。就像大多数策略游戏一样。当按下鼠标时,我调用我的draw方法创建一个四边形网格并将其添加到guiNode。 (屏幕上的平面)。

在按下鼠标时,会调用以下更新方法:

    Main.gui.getChild("Selection Box").removeFromParent();
    xMouseCur = inputManager.getCursorPosition().x;
    yMouseCur = inputManager.getCursorPosition().y;

    if (xMouseCur < xMouse) {
    }

    quad = new Quad(xMouseCur - xMouse, yMouseCur - yMouse, false);

    geom = new Geometry("Selection Box", quad);
    geom.setLocalTranslation(new Vector3f(xMouse, yMouse, 0));
    geom.setMaterial(mat1);
    geom.setCullHint(CullHint.Never);
    Main.gui.attachChild(geom);

该方法根据鼠标的第一个单击位置和鼠标的当前位置创建一个新的Quad。现在的问题是,当我尝试单击并向左拖动时,方块不会显示。但是,当我向右拖动时,确实如此。

我的假设是,当它在左侧时,创建新Quad时的width参数是负数,这会导致Quad类出现问题。我不确定。我怎么能解决这个问题?旋转四方?任何替代方案?

非常感谢

1 个答案:

答案 0 :(得分:0)

您的问题是BackFace Culling。 当Quad的宽度(或高度)为负时,您将看到tyhe对象的背面,默认为PER-TRIANGLE。 geom.setCullHint用于截顶剔除(当相机没有看着你时绘制),这是gui节点不会担心的。

强制四边形为正尺寸: 每帧适当设置位置和大小。

或者使用mat1.getAdditionalRenderState().setFaceCullMode(FaceCullMode.Off)告诉材料绘制背面。它会一直吸引双方,这会加剧每帧使用新几何的垃圾收集。