Gli ultimi tutorial di sviluppo web
 

Periferiche di gioco HTML


Premere i pulsanti per spostare il quadrato rosso:








Entra in controllo

Ora vogliamo controllare il quadrato rosso.

Aggiungere quattro pulsanti, su, giù, sinistra e destra.

Scrivere una funzione per ciascun pulsante per spostare il componente nella direzione selezionata.

Fare due nuove proprietà nel component costruttore, e li chiamano speedX e speedY . Queste proprietà vengono usati come indicatori di velocità.

Aggiungere una funzione nel component costruttore, chiamato newPos() , che utilizza il speedX e speedY proprietà per cambiare la posizione del componente.

La funzione newPos viene chiamata dalla funzione updateGameArea prima di disegnare il componente:

Esempio

<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>
Prova tu stesso "

Fermati

Se si desidera, è possibile effettuare la fermata del quadrato rosso quando si rilascia il pulsante.

Aggiungere una funzione che impostare gli indicatori di velocità a 0.

Per far fronte a entrambi gli schermi normali e touch screen, aggiungeremo il codice per entrambi i dispositivi:

Esempio

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>
Prova tu stesso "

Tastiera come controller

Possiamo anche controllare il quadrato rosso usando i tasti freccia sulla tastiera.

Creare un metodo che controlla se viene premuto un tasto, e impostare la key proprietà del myGameArea oggetto per il codice della chiave. Quando il tasto viene rilasciato, impostare la key di proprietà a false :

Esempio

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);
    }
}

Allora possiamo spostare il quadrato rosso se uno dei tasti freccia si preme:

Esempio

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();
}
Prova tu stesso "

Tasti multipli Pressed

Che cosa succede se più di un tasto viene premuto allo stesso tempo?

Nell'esempio precedente, il componente può muoversi solo orizzontalmente o verticalmente. Ora vogliamo la componente di muoversi anche in diagonale.

Creare un keys array per la myGameArea oggetto, e inserire un elemento per ogni tasto che viene premuto, e dargli il valore true , il valore rimane vero fino a quando il tasto non è premuto, il valore diventa false nella funzione keyup listener di eventi:

Esempio

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();
}
Prova tu stesso "

Utilizzando il cursore del mouse come controller

Se si desidera controllare il quadrato rosso utilizzando il cursore del mouse, aggiungere un metodo in myGameArea oggetto che aggiorna le coordinate x e y del cursore del mouse :.

Esempio

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);
    }
}

Allora possiamo spostare il quadrato rosso con il cursore del mouse:

Esempio

function updateGameArea() {
    myGameArea.clear();
    if (myGameArea.x && myGameArea.y) {
        myGamePiece.x = myGameArea.x;
        myGamePiece.y = myGameArea.y;
    }
    myGamePiece.update();
}
Prova tu stesso "

Toccare lo schermo per controllare il gioco

Possiamo anche controllare il quadrato rosso su un touch screen.

Aggiungere un metodo nella myGameArea oggetto che utilizza le coordinate x e y del luogo in cui si tocca lo schermo:

Esempio

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);
    }
}

Allora possiamo spostare il quadrato rosso se l'utente tocca lo schermo, utilizzando lo stesso codice come abbiamo fatto per il cursore del mouse:

Esempio

function updateGameArea() {
    myGameArea.clear();
    if (myGameArea.touchX && myGameArea.touchY) {
        myGamePiece.x = myGameArea.x;
        myGamePiece.y = myGameArea.y;
    }
    myGamePiece.update();
}
Prova tu stesso "

Controllori sulla tela di canapa

Possiamo anche trarre le nostre pulsanti sulla tela, e li usa come controller:

Esempio

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();
}

Aggiungere una nuova funzione che calcola fuori se un componente, in questo caso un pulsante, viene cliccato.

Inizia con l'aggiunta di listener di eventi per verificare se un pulsante del mouse viene cliccato ( mousedown and mouseup ) . Per far fronte a touch screen, anche aggiungere listener di eventi per verificare se lo schermo viene cliccato ( touchstart and touchend ) :

Esempio

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);
    }
}

Ora il myGameArea oggetto ha proprietà che ci dice il x e y le coordinate di un clic. Usiamo theese proprietà per verificare se il clic è stato eseguito su uno dei nostri pulsanti blu.

Il nuovo metodo è chiamato clicked , è un metodo del component costruttore e controlla se il componente viene cliccato.

Nel updateGameArea funzione, prendiamo le azioni neccessarry se uno dei pulsanti blu è cliccato:

Esempio

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();
}
Prova tu stesso "