2017-07-09 4 views
0

Ich mache ein Spiel mit der HTML5-Leinwand, wo der Spieler einen Windhund kontrollieren muss, um Hühnchen vom Himmel fallen zu fangen. Der Code funktioniert mit den Pfeiltasten, aber ich versuche Touch-Events hinzuzufügen. Wenn der Spieler links vom Windhund klopft und hält, bewegen Sie sich nach links. Rechts vom Windhund, bewege dich nach rechts. Mein aktueller Code ist wie folgt:Touch Event in Javascript Scheinbar zufällig?

document.body.addEventListener("touchstart", function(e) { 
     if (e.changedTouches[0].pageX > greyhound.speedX) { 
      greyhound.speedX -= 10; 
      greyhound.speedY = innerHeight - 100; 
     } else { 
      greyhound.speedX += 1; 
      greyhound.speedY = innerHeight - 100; 
     }; 
     greyhound.newPos(); 
    }, false); 
} 

Dies erzeugt scheinbar zufällige Ergebnisse, unabhängig davon, wo ich tippen. Außerdem bewegt es sich nicht weiter, während ich meinen Finger auf dem Bildschirm halte. Jede Hilfe oder Kritik ist willkommen. Vielen Dank!

Hinweis: Ich versuche, dies funktioniert nur mit einem Tippen zuerst, dann machen es funktioniert für berühren und halten.

Antwort

0

Möglicherweise weil Sie erwarten, dass etwas passiert, wenn Sie Ihren Finger auf dem Bildschirm halten, wenn Sie nur auf die erste Berührung warten. Ich würde vorschlagen, eine Touch und klicken Sie auf Handler auf die gleiche Funktion, es funktioniert, dann nehmen Sie es von dort.

reference on touch events

Auch dieses ist ein wenig von einer Seite zur Kenntnis, aber in einem sich schnell bewegenden Spiel, ein Verfahren wie dieses auf jedes Pixel des Wandels Aufruf nicht hyper performant sein würde. Vielleicht möchten Sie in etwas ähnlich aussehen, aber vielleicht nicht genau wie ein debounce type approach

+0

Ich hätte klarer sein sollen; das ist was ich tue. Mit nur einer Berührung arbeiten lassen und dann berühren und halten. –

+0

Es scheint, dass Sie die Position der Berührung mit der Geschwindigkeit des Busses vergleichen. Möchten Sie nicht zuerst feststellen, ob sie links oder rechts vom Bus geklickt haben? – clint

+0

mein Fehler, ich sollte meinen Code wirklich kommentieren! Geschwindigkeit ist Position, letztes Mal habe ich überprüft ... x = speedX ist was die newPos() Funktion deklariert. –