Я пытаюсь разработать простую игру, в которой мне нужно бросить пулю. Я хотел бы, чтобы мяч следовал за прикосновением или проведите пальцем по направлению.Java Android onTouch Direction
Однако у меня есть небольшая проблема, что у меня не было успеха в решении.
Я беру координаты на ACTION_DOWN
из MotionEvent
и координаты на ACTION_UP
из MotionEvent
, то вычислить уравнение прямой линии, чтобы переместить мяч в соответствии с этой прямой.
Проблема заключается в том, что когда я пробираюсь в направлении, близком к «вверх» или «вперед» или «впереди», мяч перемещается со скоростью молнии, а в другом направлении более искаженный (правый или левый) или диагональ, шар движется с нормальной скоростью.
Куда декомпрессия в моих расчетах?
Помогите мне, пожалуйста, я не за горами, но вам нужно решить эту проблему!
onTouch
метод:
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()) {
case(MotionEvent.ACTION_DOWN):
balle.setX(event.getX());
balle.setY(event.getY());
ya = event.getY();
xa = event.getX();
break;
case(MotionEvent.ACTION_UP):
xb = event.getX();
yb = event.getY();
balle.setMove(true);
break;
}
return true;
}
Это мой moveDirection
метод:
public void moveDirection(float xa, float ya, float xb, float yb) {
if(!move) {
return;
}
else {
float m, b;
float dx = xb-xa;
m = (yb - ya)/(xb - xa);
b = ya - (m * xa);
if(dx > 0) {
this.x += speedX;
}
else {
this.x += -speedX;
}
this.y = (m * this.x + b);
}
}
Спасибо заранее!
Когда вы двигаетесь вправо или влево, ни одно из этих событий не отправляется, поэтому, возможно, вы теряете некоторые взаимодействия (что может привести к более низкой скорости), попробуйте добавить параметр по умолчанию в этом случае, извините за не помощь больше, но я очень мало знаю об играх в android :) –
Где я должен добавить опцию вправо или влево? В функции moveDirection или в функции onTouch? –
в onTouch, вы захватываете только движение вниз и вверх, если вы добавите опцию по умолчанию в вашем случае, вы можете захватывать другие события касания. Вы можете добавить VelocityTracker для определения скорости события, я отправлю код с примером –