2014-02-06 2 views
0

마우스를 클릭하여 끌 때 화면에 선택 상자를 그리는 방법을 만들었습니다. 대부분의 전략 게임 에서처럼. 마우스를 누르면, 쿼드 메쉬를 만들고 guiNode에 추가하는 내 드로잉 메서드를 호출합니다. (화면에 평평하게). 마우스를 계속 누르고있는 동안JMonkey Selection Square Compleication

는 다음 업데이트 방법은 호출됩니다

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); 

방법은 마우스의 첫 번째 클릭의 위치와 마우스의 현재 위치를 기반으로 새로운 쿼드을 만듭니다. 이제 문제는 클릭하고 왼쪽으로 드래그하려고하면 사각형이 보이지 않는다는 것입니다. 그러나 내가 오른쪽으로 드래그하면됩니다.

내 가정은 왼쪽에있을 때 새 쿼드를 만들 때 width 매개 변수가 음수이고 이로 인해 Quad 클래스에 문제가 발생한다는 것입니다. 확실하지 않습니다. 내가 어떻게 고칠 수 있니? 쿼드 회전? 어떤 대안?

당신에게

답변

0

문제는 백 페이스 컬링입니다 대단히 감사합니다. 쿼드의 너비 (또는 높이)가 음수 일 때 기본 PER-TRIANGLE로 선택된 tyhe 개체의 뒷면을 보게됩니다. geom.setCullHint는 절두체 컬링 (카메라가 보이지 않을 때 그리기)을위한 것으로, GUI 노드가 걱정하지 않을 것입니다.

쿼드가 양수 크기가되도록하십시오 : 각 프레임마다 위치와 크기를 적절하게 설정하십시오.

또는 mat1.getAdditionalRenderState().setFaceCullMode(FaceCullMode.Off)을 사용하여 뒷면에 그림을 그려야합니다. 그것은 양면을 항상 그리기 때문에 모든 프레임마다 새로운 지오메트리를 사용하는 가비지 수집을 악화시킬 것입니다.