好吧,我正在嘗試做一些簡單的對象向你觸摸屏幕的方向移動。對象沒有按正確的方向移動
如果我直接觸及對象的西北方,它會沿着觸摸位置的方向移動。如果我直接觸摸物體的東南方向,它也會沿着觸摸位置的方向移動。但是,如果我直接觸及物體的東北方向,它將朝着西南方向相反的方向移動。如果我直接觸及物體的西南方,它也會朝東北方向相反的方向移動。另外,如果我觸摸到物體的北部,但是稍微偏向西部,它將向北直線向西。與向北接觸物體西部時一樣,它會直接向北並稍微向西。其他方向也是如此。
真的,所有的方向都有些明顯不正確。我一直在做一些紙張計算,我似乎正在得到一些正確的角度,但在這一點上,我完全難住。
有誰知道這個問題可能是什麼?
package com.badlogic.androidgames.texasholdem;
import java.util.List;
import android.util.FloatMath;
import com.badlogic.androidgames.framework.Game;
import com.badlogic.androidgames.framework.Graphics;
import com.badlogic.androidgames.framework.Input.TouchEvent;
import com.badlogic.androidgames.framework.Screen;
public class MainMenuScreen extends Screen {
public static float TO_RADIANS = (1/180.0f) * (float) Math.PI;
public static float TO_DEGREES = (1/(float) Math.PI) * 180;
float num_x = 0; // Position of object on X axis
float num_y = 0; // Position of object on Y axis
float angle = 0;
public MainMenuScreen(Game game) {
super(game);
}
public void update(float deltaTime) {
Graphics g = game.getGraphics();
List<TouchEvent> touchEvents = game.getInput().getTouchEvents();
game.getInput().getKeyEvents();
int len = touchEvents.size();
for(int i = 0; i < len; i++) {
TouchEvent event = touchEvents.get(i);
if(event.type == TouchEvent.TOUCH_UP) {
if(inBounds(event, 0, 0, g.getWidth(), g.getHeight())) {
// Calculate the angle of the direction between two points
angle = (float) Math.atan2(event.x - num_x, event.y - num_y) * TO_DEGREES;
if (angle < 0)
angle += 360;
// This is just to give me numbers on the Math.atan2 result, angle, to/from X position, and to/from Y position
System.out.println("Pressed! - ATAN: " + Math.atan2(event.x - num_x, event.y - num_y)
+ " - ANGLE:" + angle + " - POS: " + event.x + "tx/"
+ (int)num_x + "fx " + event.y + "ty/" + (int)num_y + "fy");
}
}
}
// Moving object in direction at 1f speed
num_x += (1f * (float) Math.cos(angle * TO_RADIANS));
num_y += (1f * (float) Math.sin(angle * TO_RADIANS));
}
private boolean inBounds(TouchEvent event, int x, int y, int width, int height) {
if(event.x > x && event.x < x + width - 1 &&
event.y > y && event.y < y + height - 1)
return true;
else
return false;
}
public void present(float deltaTime) {
Graphics g = game.getGraphics();
g.drawPixmap(Assets.background, 0, 0);
g.drawPixmap(Assets.backcard, (int)num_x, (int)num_y);
}
public void pause() {
Settings.save(game.getFileIO());
}
public void resume() {
}
public void dispose() {
}
}
第一個似乎沒有很好地工作,我可能不得不在稍後檢查它。第二部分我想避免使用。精確的方向很重要。 – user3397452
你可以通過數學來增加第二個數字我只是簡單的讓你看到基本的想法。 – La5t5tarfighter