我创建了一种在单击并拖动鼠标时在屏幕上绘制选择框的方法。就像大多数策略游戏一样。当按下鼠标时,我调用我的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类出现问题。我不确定。我怎么能解决这个问题?旋转四方?任何替代方案?
非常感谢
答案 0 :(得分:0)
您的问题是BackFace Culling。 当Quad的宽度(或高度)为负时,您将看到tyhe对象的背面,默认为PER-TRIANGLE。 geom.setCullHint用于截顶剔除(当相机没有看着你时绘制),这是gui节点不会担心的。
强制四边形为正尺寸: 每帧适当设置位置和大小。
或者使用mat1.getAdditionalRenderState().setFaceCullMode(FaceCullMode.Off)
告诉材料绘制背面。它会一直吸引双方,这会加剧每帧使用新几何的垃圾收集。