Ich versuche ein einfaches Spiel zu entwickeln, in dem ich eine Kugel werfen muss. Ich möchte der Ball folgt die Berührung oder Swipe-Richtung.Java Android onTouch Richtung
Allerdings habe ich ein kleines Problem, das ich nicht erfolgreich gelöst habe.
Ich nehme Koordinaten auf die ACTION_DOWN
von MotionEvent
, und die Koordinaten auf die ACTION_UP
von MotionEvent
, dann berechnet die Geradengleichung, um den Ball zu bewegen, gemäß dieser geraden Linie.
Das Problem ist, dass, wenn ich in eine Richtung in der Nähe von "oben" oder "vorwärts" oder "vor" wische, der Ball blitzschnell bewegt, während in der anderen Richtung mehr schief (rechts oder links) oder Diagonal bewegt sich der Ball mit normaler Geschwindigkeit.
Wo ist der Fehler in meiner Berechnung?
Helfen Sie mir bitte, ich bin nicht weit von dem Ergebnis, aber müssen Sie für die Lösung dieses Problems!
Die onTouch
Methode:
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;
}
Das ist mein moveDirection
Methode:
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);
}
}
Vielen Dank im Voraus!
Wenn Sie sich nach rechts oder links bewegen, wird keines dieser Ereignisse ausgelöst, also verlieren Sie möglicherweise einige Interaktionen (die die niedrigere Geschwindigkeit verursachen können), versuchen Sie, eine Standardoption in dem Fall hinzuzufügen, sorry für nicht mehr Hilfe, aber ich weiß sehr wenig über Spiele in android :) –
Wo muss ich die Option rechts oder links hinzufügen? In der Funktion moveDirection oder in der Funktion onTouch? –
in OnTouch, erfassen Sie nur herunter und hoch Movimentes, wenn Sie eine Standardoption in Ihrem Fall hinzufügen, können Sie andere Berührungsereignisse erfassen. Sie können auch einen VelocityTracker hinzufügen, um die Geschwindigkeit des Ereignisses zu bestimmen. Ich poste einen Code mit einem Beispiel –