헥스 타일 맵을 만들었는데 두 가지 기능을 결합하는 데 문제가 있습니다. 1) 마우스/손가락으로 드래그하여지도 스크롤 2) 강조 표시 마우스 오버시 타일LibGdx : 마우스 위치와 선택한 타일 (세계 위치)이 일치하지 않습니다.
내 세계에는 맞춤형 Tile() 개체로 구성된지도가 있습니다. 각 타일에는 x와 y 좌표가 저장됩니다. 게임 클래스에서는 OrthographicCamera와 TileSelector를 사용합니다.이 클래스는 현재 마우스 위치를 가져 와서 해당 좌표 아래의 적절한 타일을 강조 표시합니다. 더 많은 방법으로, 내 render() 메서드는 마우스/손가락이 눌려 졌는지 여부를 확인합니다. 그렇다면 손가락/마우스 버튼을 누른 상태에서 이동 한 거리만큼 각 타일의 위치가 업데이트됩니다.
다음 코드는 관련 부분을 보여줍니다. 지도를 이동하지 않는 한 강조 표시가 작동합니다. 그러나 타일을 이동하자마자 강조 표시가 꺼지기 시작합니다 (이동 한 거리의 양만큼).
//initialiting orthographic camera
camera = new OrthographicCamera(800, 480);
camera.setToOrtho(false, 800, 480);
//draw screen black
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();
game.batch.setProjectionMatrix(camera.combined);
//drawing to batch
game.batch.begin();
//drawing the tiles, simply getting x,y coords and putting on screen
world.render(game.batch);
//highlighting tile under the current mouse/finger coords and drawing highlight on screen
selector.select(Gdx.input.getX(), Gdx.graphics.getHeight() - Gdx.input.getY(), game.batch, world);
game.batch.end();
//scrolling routine
if (Gdx.input.isTouched()) {
Vector3 touchPos = new Vector3();
touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
camera.unproject(touchPos);
deltaX = (float)Gdx.input.getDeltaX();
deltaY = (float)Gdx.input.getDeltaY();
//moving each tile by the distance moved
for(int i = 0; i< world.getMap().getWidth(); i++){
for(int j = 0; j< world.getMap().getHeight(); j++){
tile = world.getMap().getTile(i, j);
tile.x += deltaX;
tile.y -= deltaY;
world.getMap().setTile(tile, i, j);
}
}
}
시각화를위한 스크린 샷을 참조하십시오) 타일을 통해
1) 이동하지지도, 마우스 (빨간색 화살표)을하고 http://i.stack.imgur.com/3d7At.png
2 을 강조지도 이동하지만, 기존 위치에 마우스, 아니 타일을 강조 표시해야하지만지도가 이동하지 않은 것처럼 타일이 강조 표시됩니다. http://i.stack.imgur.com/dSibc.png
이제 맵핑이되지 않아 문제가 발생하는 것으로 알고 있습니다. 데이트 화면 및 세계 좌표가 올바르게 조정됩니다. 그러나 LibGdx/OpenGL/projection/translating에 대한 지식이 부족하기 때문에 실수를 정확히 지적 할 수 없습니다. 이 렌더링 알고리즘을 그대로 수정할 수 있습니까? 또는 타일을 옮겨 카메라를 옮기는 방법으로 전환해야합니까 (방법)? 더 많은 코드가 필요하면 알려 주시기 바랍니다. 감사합니다.
빠른 질문 : 게임 창의 전체 너비에 표시되는 클릭하는 세계는 무엇입니까? 그렇지 않다면 당신은 당신의 코디네이트에 그것을 적합하게하는 요소로 곱해야합니다. – AreusAstarte
당신이 무슨 뜻인지 잘 모르겠습니다. 지도는 15x10 타일 크기이며 약 13x10 크기 만 표시됩니다. 움직이지 않으면보기 밖으로 뻗어 나옵니다. 그렇지 않으면 강조 표시가 각 타일에서 매우 정확하게 작동합니다. – Arthur
@Arthur 안녕하세요 당신이하고 싶은 것을 이해하려고했지만 제 영어의 경우 잘 이해하지 못한다고 생각합니다.하지만지도를 옮기거나 움직이기를 원한다면지도를 사용하는 것이 더 좋을 것이라고 생각합니다. 카메라 클래스, 번역 요법이 훨씬 빠릅니다.지도를 옮깁니다. https://github.com/libgdx/libgdx/wiki/Orthographic-camera –