Verwenden von TouchScreens für die Spielsteuerung

8

Ich arbeite an meinem ersten Videospiel für die Android-Plattform als ein paar Nächte und Wochenenden-Projekt.

Es kommt gut voran, aber ich bin sehr unzufrieden mit der Kontrollsensibilität.

In diesem Spiel bewegst du ein Objekt links und rechts auf dem Bildschirm. Auf der Unterseite des Bildschirms ist ein "Touchpad" der Art, wo Ihr Finger ruhen sollte.

%Vor%

Ich verwende derzeit eine Statusvariable, um "MOVING_LEFT, MOVING_RIGHT, NOT_MOVING" zu halten, und aktualisiere die Position des Spielerobjekts für jeden Frame basierend auf dieser Variablen.

Allerdings ist mein Code, der die Touchscreen-Eingabe liest und diese Statusvariable einstellt, entweder zu sensativ oder zu lückenhaft, je nachdem, wie ich ihn tweeze:

%Vor%

Die Idee ist, dass, wenn es irgendeine Bewegung gibt, ich die vorherige Position des Fingers des Benutzers überprüfe und dann herausfinde, in welche Richtung der Spieler bewegt werden soll.

Das funktioniert nicht sehr gut, ich denke, es gibt einige IPhone / Android-Entwickler hier, die herausgefunden haben, wie man gute Kontrollen über einen Touchscreen macht und einen Rat geben kann.

    
FlySwat 15.03.2009, 02:05
quelle

2 Antworten

2

Sie könnten etwas Ähnliches wie "Rechtecke ziehen" unter Windows ausprobieren. Wenn Sie die Maustaste auf etwas gedrückt halten, starten Sie keine Ziehoperation, bis sich die Maus außerhalb einer kleinen Region um die Position mit der Maus nach unten bewegt. Grund ist, dass es sehr schwierig ist, den Cursor beim Klicken auf dem gleichen Pixel zu halten.

Also könnte ein erster Versuch (int)e.getX() >= this.mTouchX + DEAD_ZONE und ähnlich für den anderen Fall sein, wobei DEAD_ZONE eine kleine ganze Zahl ist.

Es handelt sich jedoch nicht um das Umdrehen im selben Takt. Sie können damit umgehen, indem Sie nur nach links drehen, wenn die aktuelle Position nach der Rechtsdrehung mindestens DEAD_ZONE Pixel links von der letzten Position ist und umgekehrt.

    
Thomas 15.03.2009 02:24
quelle
2

Ein offensichtliches Problem ist, dass Sie nirgendwo die Zeit seit der letzten Berührung berücksichtigen.

Ich würde vorschlagen, dass Sie die Berührung des Spielers als Ausdruck der gewünschten Bewegung in einem analogen Bereich von -x/+x und -y/+y behandeln und dann die tatsächliche Bewegung anderswo basierend auf der Zeit durchführen.

z. B.

%Vor%

Wenn also die Höchstgeschwindigkeit Ihres Objekts 10 ms-1 beträgt und der Finger des Spielers auf dem Steuerfeld auf 0,5 steht, würde sich das Objekt jede Sekunde um 5 Meter bewegen. Wenn Ihr Spiel mit 10 Bildern pro Sekunde läuft, bewegt sich das Objekt in jedem Frame um 0,5 Meter.

Diese Zahlen sind fiktiv, aber zeigen hoffentlich die Notwendigkeit, die Kontrolle von der Bewegung zu trennen und dann die Zeit zu berücksichtigen.

    
Andrew Grant 15.03.2009 02:39
quelle