Ultimele tutoriale de dezvoltare web
 

Controlere HTML joc


Împingeți butoanele pentru a muta pătrat roșu:








Intră în control

Acum vrem să controleze pătrat roșu.

Adăugați patru butoane, în sus, în jos, la stânga și la dreapta.

Scrieți o funcție pentru fiecare buton pentru a muta componenta în direcția selectată.

Asigurați - două noi proprietăți în component constructor, și le numim speedX și speedY . Aceste proprietăți sunt utilizate ca indicatori de viteză.

Adăugați o funcție în component constructorului, numit newPos() , care utilizează speedX și speedY proprietățile pentru a schimba poziția componentei.

Funcția et NewPos este numit de funcția updateGameArea înainte de desen componenta:

Exemplu

<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>
Încearcă - l singur »

Nu te mai mișca

Dacă doriți, puteți face stația de pătrat roșu, atunci când eliberați un buton.

Adăugați o funcție care va stabili indicatorii de viteză la 0.

Pentru a face față cu ambele ecrane normale și ecrane tactile, vom adăuga codul pentru ambele dispozitive:

Exemplu

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>
Încearcă - l singur »

Tastatură ca Controler

Putem controla, de asemenea pătrat roșu folosind tastele săgeată de pe tastatură.

Creați o metodă care verifică dacă este apăsată o tastă, și setați - key proprietatea myGameArea obiectului la codul cheie. Atunci când cheia este eliberată, setați key proprietatea false :

Exemplu

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

Apoi, ne putem muta pătrat roșu în cazul în care una dintre tastele cu săgeți sunt apăsate:

Exemplu

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();
}
Încearcă - l singur »

Taste multiple Apăsat

Ce se întâmplă dacă mai mult de o tastă este apăsată în același timp?

In exemplul de mai sus, componenta se poate deplasa numai orizontal sau vertical. Acum vrem componenta să se miște, de asemenea, pe diagonală.

Crearea unei keys de matrice pentru myGameArea obiect, și se introduce un element pentru fiecare tastă este apăsată, și îi dă valoarea true , valoarea rămâne adevărată pana cheia nu mai este apăsat, valoarea devine false în funcția keyup eveniment ascultător:

Exemplu

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();
}
Încearcă - l singur »

Utilizarea Mouse Cursor ca un controler

Dacă doriți să controlați pătrat roșu folosind cursorul mouse - ului, adăugați o metodă în myGameArea obiect care actualizează coordonatele x și y ale cursorului mouse - ului :.

Exemplu

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

Apoi, putem muta pătrat roșu folosind cursorul mouse-ului:

Exemplu

function updateGameArea() {
    myGameArea.clear();
    if (myGameArea.x && myGameArea.y) {
        myGamePiece.x = myGameArea.x;
        myGamePiece.y = myGameArea.y;
    }
    myGamePiece.update();
}
Încearcă - l singur »

Atingeți ecranul pentru a controla jocul

Putem controla, de asemenea pătrat roșu pe un ecran tactil.

Adăugați o metodă în myGameArea obiect care utilizează coordonatele x și y ale în cazul în care este atins ecranul:

Exemplu

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

Apoi, ne putem muta pătrat roșu în cazul în care utilizatorul atinge ecranul, folosind același cod așa cum am făcut-o pentru cursorul mouse-ului:

Exemplu

function updateGameArea() {
    myGameArea.clear();
    if (myGameArea.touchX && myGameArea.touchY) {
        myGamePiece.x = myGameArea.x;
        myGamePiece.y = myGameArea.y;
    }
    myGamePiece.update();
}
Încearcă - l singur »

Controlerele pe pânză

Putem trage, de asemenea, propriile noastre butoane pe pânză, și să le utilizeze ca controlere:

Exemplu

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

Adăugați o nouă funcție care cifrele în cazul în care o componentă, în acest caz, un buton, se face clic.

Începeți prin adăugarea de ascultatori eveniment pentru a verifica dacă un buton al mouse - ului este apăsat ( mousedown and mouseup ) . Pentru a face față cu ecrane tactile, adăugați , de asemenea , ascultătorii eveniment pentru a verifica dacă ecranul se face clic pe ( touchstart and touchend ) :

Exemplu

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

Acum myGameArea obiect are proprietăți care ne spune coordonatele x și y ale unui clic. Noi folosim proprietăți pentru a verifica aceste pe care, dacă faceți clic a fost efectuat pe unul dintre butoanele noastre albastre.

Noua metodă se numește a clicked , aceasta este o metodă de component constructor, și verifică dacă componenta se face clic.

În updateGameArea funcția, vom lua măsurile neccessarry în cazul în care se face clic pe unul dintre butoanele albastre:

Exemplu

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();
}
Încearcă - l singur »