Neueste Web-Entwicklung Tutorials
 

HTML Game-Controller


Drücken Sie die Tasten auf das rote Quadrat zu bewegen:








Erhalten Sie in der Systemsteuerung

Jetzt wollen wir das rote Quadrat zu steuern.

Fügen Sie vier Tasten, oben, unten, links und rechts.

Schreiben Sie eine Funktion für jede Taste, um die Komponente in die gewünschte Richtung zu bewegen.

Machen Sie zwei neue Eigenschaften in der component Konstruktor, und nennen sie speedX und speedY . Diese Eigenschaften werden als Geschwindigkeitsanzeigen verwendet.

Fügen Sie eine Funktion in der component Konstruktor genannt newPos() , die die verwendet speedX und speedY Eigenschaften , um die Position der Komponente ändern.

Die NEWPOS Funktion wird von der updateGameArea Funktion aufgerufen, bevor die Komponente Zeichnung:

Beispiel

<script>
function component(width, height, color, x, y) {
    this.width = width;
    this.height = height;
    this.speedX = 0;
    this.speedY = 0;
    this.x = x;
    this.y = y;
    this.update = function() {
        ctx = myGameArea.context;
        ctx.fillStyle = color;
        ctx.fillRect(this.x, this.y, this.width, this.height) ;
    }
    this.newPos = function() {
        this.x += this.speedX;
        this.y += this.speedY;
    }
}

function updateGameArea() {
    myGameArea.clear() ;
    myGamePiece.newPos();
   
myGamePiece.update();
}

function moveup() {
    myGamePiece.speedY -= 1;
}

function movedown() {
    myGamePiece.speedY += 1;
}

function moveleft() {
    myGamePiece.speedX -= 1;
}

function moveright() {
    myGamePiece.speedX += 1;
}
</script>

<button onclick="moveup()">UP</button>
<button onclick="movedown()">DOWN</button>
<button onclick="moveleft()">LEFT</button>
<button onclick="moveright()">RIGHT</button>
Versuch es selber "

Nicht bewegen

Wenn Sie möchten, können Sie das rote Quadrat Anschlag machen, wenn Sie eine Taste loslassen.

Fügen Sie eine Funktion, die die Geschwindigkeitsanzeigen auf 0 gesetzt wird.

Um mit sowohl normalen Bildschirmen und Touchscreens werden wir Code für beide Geräte hinzufügen:

Beispiel

function stopMove() {
    myGamePiece.speedX = 0;
    myGamePiece.speedY = 0;
}
</script>

<button omousedown="moveup()" onmouseup="stopMove()" ontouchstart="moveup() ">UP</button>
<button omousedown="movedown()" onmouseup="stopMove()" ontouchstart="movedown()" >DOWN</button>
<button omousedown="moveleft()" onmouseup="stopMove()" ontouchstart="moveleft()" >LEFT</button>
<button omousedown="moveright()" onmouseup="stopMove()" ontouchstart="moveright()" >RIGHT</button>
Versuch es selber "

Tastatur als Controller

Wir können auch das rote Quadrat steuern, indem Sie mit den Pfeiltasten auf der Tastatur.

Erstellen Sie eine Methode , die , wenn ein Schlüssel überprüft gedrückt wird , und stellen Sie den key des myGameArea Objekt an den Schlüsselcode. Wenn die Taste losgelassen wird, stellen Sie den key - Eigenschaft auf false :

Beispiel

var myGameArea = {
    canvas : document.createElement("canvas"),
    start : function() {
        this.canvas.width = 480;
        this.canvas.height = 270;
        this.context = this.canvas.getContext("2d");
        document.body.insertBefore(this.canvas, document.body.childNodes[0]);
        this.interval = setInterval(updateGameArea, 20);
        window.addEventListener('keydown', function (e) {
            myGameArea.key = e.keyCode;
        })
        window.addEventListener('keyup', function (e) {
            myGameArea.key = false;
        })
    },
    clear : function(){
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
    }
}

Dann können wir das rote Quadrat bewegen, wenn eine der Pfeiltasten gedrückt werden:

Beispiel

function updateGameArea() {
    myGameArea.clear();
    myGamePiece.speedX = 0;
    myGamePiece.speedY = 0;
    if (myGameArea.key && myGameArea.key == 37) {myGamePiece.speedX = -1; }
    if (myGameArea.key && myGameArea.key == 39) {myGamePiece.speedX = 1; }
    if (myGameArea.key && myGameArea.key == 38) {myGamePiece.speedY = -1; }
    if (myGameArea.key && myGameArea.key == 40) {myGamePiece.speedY = 1; }
   
myGamePiece.newPos();
    myGamePiece.update();
}
Versuch es selber "

Mehrere Tasten gedrückt

Was ist, wenn mehr als eine Taste gleichzeitig gedrückt?

In dem obigen Beispiel kann die Komponente nur horizontal oder vertikal zu bewegen. Jetzt wollen wir die Komponente auch diagonal bewegen.

Erstellen Sie einen keys - Array für die myGameArea Objekt, und legen Sie ein Element für jede Taste , die gedrückt wird, und geben Sie ihm den Wert true , bleibt der Wert true , bis die Taste nicht mehr gedrückt wird , der Wert wird false in der keyup Ereignis - Listener - Funktion:

Beispiel

var myGameArea = {
    canvas : document.createElement("canvas"),
    start : function() {
        this.canvas.width = 480;
        this.canvas.height = 270;
        this.context = this.canvas.getContext("2d");
        document.body.insertBefore(this.canvas, document.body.childNodes[0]);
        this.interval = setInterval(updateGameArea, 20);
        window.addEventListener('keydown', function (e) {
            myGameArea.keys = (myGameArea.keys || []);
            myGameArea.keys[e.keyCode] = true;
        })
        window.addEventListener('keyup', function (e) {
            myGameArea.keys[e.keyCode] = false;
        })
    },
    clear : function(){
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
    }
}

 function updateGameArea() {
    myGameArea.clear();
    myGamePiece.speedX = 0;
    myGamePiece.speedY = 0;
    if ( myGameArea.keys && myGameArea.keys[37] ) {myGamePiece.speedX = -1; }
    if ( myGameArea.keys && myGameArea.keys[39] ) {myGamePiece.speedX = 1; }
    if ( myGameArea.keys && myGameArea.keys[38] ) {myGamePiece.speedY = -1; }
    if ( myGameArea.keys && myGameArea.keys[40] ) {myGamePiece.speedY = 1; }
    myGamePiece.newPos();
    myGamePiece.update();
}
Versuch es selber "

Mit der Maus-Cursor als Controller

Wenn Sie auf das rote Quadrat steuern möchten , indem Sie den Mauszeiger verwenden, fügen Sie eine Methode in myGameArea Objekt, das die x- und y - Koordinaten des Mauszeigers aktualisiert :.

Beispiel

var myGameArea = {
    canvas : document.createElement("canvas"),
    start : function() {
        this.canvas.width = 480;
        this.canvas.height = 270;
        this.canvas.style.cursor = "none"; //hide the original cursor
        this.context = this.canvas.getContext("2d");
        document.body.insertBefore(this.canvas, document.body.childNodes[0]);
        this.interval = setInterval(updateGameArea, 20);
        window.addEventListener('mousemove', function (e) {
            myGameArea.x = e.pageX;
            myGameArea.y = e.pageY;
        })
    },
    clear : function(){
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
    }
}

Dann können wir das rote Quadrat mit der Maus-Cursor zu bewegen:

Beispiel

function updateGameArea() {
    myGameArea.clear();
    if (myGameArea.x && myGameArea.y) {
        myGamePiece.x = myGameArea.x;
        myGamePiece.y = myGameArea.y;
    }
    myGamePiece.update();
}
Versuch es selber "

Berühren Sie den Bildschirm das Spiel zu kontrollieren

Wir können auch das rote Quadrat auf einem Touch-Screen steuern.

Fügen Sie eine Methode in der myGameArea Objekt, das die x- und y - Koordinaten verwendet , wo der Bildschirm berührt wird:

Beispiel

var myGameArea = {
    canvas : document.createElement("canvas"),
    start : function() {
        this.canvas.width = 480;
        this.canvas.height = 270;
        this.context = this.canvas.getContext("2d");
        document.body.insertBefore(this.canvas, document.body.childNodes[0]);
        this.interval = setInterval(updateGameArea, 20);
        window.addEventListener('touchmove', function (e) {
            myGameArea.x = e.touches[0].screenX;
            myGameArea.y = e.touches[0].screenY;
        })
    },
    clear : function(){
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
    }
}

Dann können wir das rote Quadrat bewegen, wenn der Benutzer den Bildschirm berührt, durch den gleichen Code verwenden, wie wir für den Maus-Cursor tat:

Beispiel

function updateGameArea() {
    myGameArea.clear();
    if (myGameArea.touchX && myGameArea.touchY) {
        myGamePiece.x = myGameArea.x;
        myGamePiece.y = myGameArea.y;
    }
    myGamePiece.update();
}
Versuch es selber "

Controller auf der Leinwand

Wir können auch unsere eigenen Tasten auf der Leinwand zu zeichnen, und sie als Controller verwenden:

Beispiel

function startGame() {
  myGamePiece = new component(30, 30, "red" , 10, 120);
  myUpBtn = new component(30, 30, "blue" , 50, 10);
  myDownBtn = new component(30, 30, "blue" , 50, 70);
  myLeftBtn = new component(30, 30, "blue" , 20, 40);
  myRightBtn = new component(30, 30, "blue" , 80, 40);
  myGameArea.start();
}

Fügen Sie eine neue Funktion, die, wenn eine Komponente herausfindet, in diesem Fall auf eine Schaltfläche wird geklickt.

Beginnen Sie mit dem Event - Listener Hinzufügen zu überprüfen , ob eine Maustaste gedrückt wird ( mousedown and mouseup ) . Um mit Touchscreens umgehen, fügen Sie auch Event - Listener zu überprüfen , ob der Bildschirm auf geklickt wird ( touchstart and touchend ) :

Beispiel

var myGameArea = {
    canvas : document.createElement("canvas"),
    start : function() {
        this.canvas.width = 480;
        this.canvas.height = 270;
        this.context = this.canvas.getContext("2d");
        document.body.insertBefore(this.canvas, document.body.childNodes[0]);
        this.interval = setInterval(updateGameArea, 20);
        window.addEventListener('mousedown', function (e) {
            myGameArea.x = e.pageX;
            myGameArea.y = e.pageY;
        })
        window.addEventListener('mouseup', function (e) {
            myGameArea.x = false;
            myGameArea.y = false;
        })
        window.addEventListener('touchstart', function (e) {
            myGameArea.x = e.pageX;
            myGameArea.y = e.pageY;
        })
        window.addEventListener('touchend', function (e) {
            myGameArea.x = false;
            myGameArea.y = false;
        })
    },
    clear : function(){
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
    }
}

Nun ist die myGameArea Objekt hat Eigenschaften , die uns die x- und y-Koordinaten eines Klicks erzählt. Wir verwenden theese Eigenschaften zu überprüfen, ob der Klick auf einem unserer blauen Tasten durchgeführt wurde.

Die neue Methode wird aufgerufen , clicked , es ist ein Verfahren der ist component Konstruktor, und es wird geprüft , ob die Komponente geklickt wird.

In der updateGameArea Funktion nehmen wir die neccessarry Aktionen , wenn eine der blauen Tasten geklickt wird:

Beispiel

function component(width, height, color, x, y) {
    this.width = width;
    this.height = height;
    this.speedX = 0;
    this.speedY = 0;
    this.x = x;
    this.y = y;
    this.update = function() {
        ctx = myGameArea.context;
        ctx.fillStyle = color;
        ctx.fillRect(this.x, this.y, this.width, this.height);
    }
    this.clicked = function() {
        var myleft = this.x;
        var myright = this.x + (this.width);
        var mytop = this.y;
        var mybottom = this.y + (this.height);
        var clicked = true;
        if ((mybottom < myGameArea.y) || (mytop > myGameArea.y)
         || (myright < myGameArea.x) || (myleft > myGameArea.x)) {
            clicked = false;
        }
        return clicked;
    }
}

function updateGameArea() {
    myGameArea.clear();
    if (myGameArea.x && myGameArea.y) {
        if (myUpBtn.clicked()) {
            myGamePiece.y -= 1;
        }
        if (myDownBtn.clicked()) {
            myGamePiece.y += 1;
        }
        if (myLeftBtn.clicked()) {
            myGamePiece.x += -1;
        }
        if (myRightBtn.clicked()) {
            myGamePiece.x += 1;
        }
    }
    myUpBtn.update();
    myDownBtn.update();
    myLeftBtn.update();
    myRightBtn.update();
    myGamePiece.update();
}
Versuch es selber "