From 69b045e8efb73235c92aba841cda9070550737ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Sat, 13 Sep 2014 21:36:13 +0200 Subject: fix camera dragging, use screenToViewport ratio and zoom --- core/src/ch/asynk/tankontank/screens/GameScreen.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/src/ch/asynk/tankontank/screens/GameScreen.java b/core/src/ch/asynk/tankontank/screens/GameScreen.java index 1324a53..26db2d6 100644 --- a/core/src/ch/asynk/tankontank/screens/GameScreen.java +++ b/core/src/ch/asynk/tankontank/screens/GameScreen.java @@ -17,6 +17,7 @@ import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Label; +import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.utils.viewport.ScreenViewport; @@ -25,13 +26,10 @@ import ch.asynk.tankontank.TankOnTank; public class GameScreen extends AbstractScreen { - static private final int MOVE_STEP = 3; static private final float ZOOM_MAX = 0.2f; static private final float ZOOM_GESTURE_FACTOR = 300.f; static private final float ZOOM_SCROLL_FACTOR = 10.0f; - private int touchX; - private int touchY; private float maxZoomOut; final OrthographicCamera cam; @@ -42,6 +40,9 @@ public class GameScreen extends AbstractScreen private Stage hud; private Stage gameStage; + private Vector2 screenToViewport = new Vector2(); // ratio + private Vector2 dragPos = new Vector2(); // screen coordinates + public GameScreen(final TankOnTank game) { super(game); @@ -84,9 +85,8 @@ public class GameScreen extends AbstractScreen @Override public boolean touchDragged(int x, int y, int pointer) { - cam.translate((touchX - x) * cam.zoom * MOVE_STEP, (y - touchY) * cam.zoom * MOVE_STEP, 0); - touchX = x; - touchY = y; + cam.translate(((dragPos.x - x) * cam.zoom * screenToViewport.x), ((y - dragPos.y) * cam.zoom * screenToViewport.y), 0); + dragPos.set(x, y); clampCameraPos(); return true; } @@ -94,8 +94,7 @@ public class GameScreen extends AbstractScreen public boolean touchDown(int x, int y, int pointer, int button) { if (button == Input.Buttons.LEFT) { - touchX = x; - touchY = y; + dragPos.set(x, y); } return true; } @@ -146,6 +145,7 @@ public class GameScreen extends AbstractScreen gameStage.getViewport().update(width, height); maxZoomOut = Math.min((map.getWidth() / cam.viewportWidth), (map.getHeight() / cam.viewportHeight)); cam.zoom = MathUtils.clamp(cam.zoom, ZOOM_MAX, maxZoomOut); + screenToViewport.set((cam.viewportWidth / width), (cam.viewportHeight / height)); } @Override -- cgit v1.1-2-g2b99