Pelin ohjain
- Edellinen sivu Pelielementit
- Seuraava sivu Pelin esteet
按下按钮可移动红色方块:
掌控一切
现在我们要控制红色方块。
添加四个按钮:上、下、左、右。
为每个按钮编写一个函数,以沿选定方向移动组件。
sivulla component
构造函数中创建两个新属性,并将它们命名为 speedX
ja speedY
。这些属性被用作速度指示器。
sivulla component
构造函数中添加一个名为 newPos()
的函数,该函数使用 speedX
ja speedY
属性来更改组件的位置。
在绘制组件之前,从 updateGameArea
函数调用 newPos
函数:
实例
<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()">Ylös</button> <button onclick="movedown()">ALAS</button> <button onclick="moveleft()">VASEN</button> <button onclick="moveright()">OIKEA</button>
Pysäytä liikkuminen
Jos tarpeen, voit pysäyttää punaisen neliön, kun napin vapautetaan.
Lisäämään funktion, joka asettaa nopeusindikaattorin arvoksi 0.
Vastaamaan tavallisiin näyttöihin ja kosketusnäyttöihin, lisäämme koodia molemmille laitteille:
实例
function stopMove() { myGamePiece.speedX = 0; myGamePiece.speedY = 0; } </script> <button onmousedown="moveup()" onmouseup="stopMove()" ontouchstart="moveup()">Ylös</button> <button onmousedown="movedown()" onmouseup="stopMove()" ontouchstart="movedown()">ALAS</button> <button onmousedown="moveleft()" onmouseup="stopMove()" ontouchstart="moveleft()">VASEN</button> <button onmousedown="moveright()" onmouseup="stopMove()" ontouchstart="moveright()">OIKEA</button>
Näppäimistö ohjaimena
voimme käyttää näppäimistön suuntanäppäimiä punaisen neliön ohjaamiseen.
luodaan metodi tarkistamaan onko jotain näppäintä painettuna ja myGameArea
olion avain
Asetetaan ominaisuus avainkoodeiksi. Kun näppäin vapautetaan, avain
Asetetaan ominaisuus false
:
实例
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); } }
这样,如果按下方向键之一,我们就可以移动红色方块:
实例
function updateGameArea() { myGameArea.clear(); myGamePiece.speedX = 0; myGamePiece.speedY = 0; jos (myGameArea.key && myGameArea.key == 37) {myGamePiece.speedX = -1; } jos (myGameArea.key && myGameArea.key == 39) {myGamePiece.speedX = 1; } jos (myGameArea.key && myGameArea.key == 38) {myGamePiece.speedY = -1; } jos (myGameArea.key && myGameArea.key == 40) {myGamePiece.speedY = 1; } myGamePiece.newPos(); myGamePiece.update(); }
按下多个键
如果同时按下多个键怎么办?
在上面的例子中,组件只能水平或垂直移动。现在我们希望组件也可以沿对角线移动。
为 myGameArea
对象创建一个 keys
数组,并为每个按下的键插入一个元素,并为其赋值 true
,该值保持 true ,直到不再按下该键,该值在 keyup
事件监听函数中变为 false
:
实例
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; jos (myGameArea.keys && myGameArea.keys[37]) {myGamePiece.speedX = -1; } jos (myGameArea.keys && myGameArea.keys[39]) {myGamePiece.speedX = 1; } jos (myGameArea.keys && myGameArea.keys[38]) {myGamePiece.speedY = -1; } if (myGameArea.keys && myGameArea.keys[40]) {myGamePiece.speedY = 1; } myGamePiece.newPos(); myGamePiece.update(); }
Käytä hiiren osoittimena ohjainta
Jos haluat käyttää hiiren osoittimen hallitsemiseen punaista laatikkoa, valitse myGameArea
Lisäämällä olioon menetelmä päivittääksesi hiiren osoittimen x- ja y-koordinaatit:
实例
var myGameArea = { canvas : document.createElement("canvas"), start : function() { this.canvas.width = 480; this.canvas.height = 270; this.canvas.style.cursor = "none"; //piilota alkuperäinen osoitin 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); } }
Sitten voimme käyttää hiiren osoittimen liikuttamaan punaista laatikkoa:
实例
function updateGameArea() { myGameArea.clear(); if (myGameArea.x && myGameArea.y) { myGamePiece.x = myGameArea.x; myGamePiece.y = myGameArea.y; } myGamePiece.update(); }
Koskettele näyttöä ohjataksesi peliä
Voimme myös hallita punaista laatikkoa kosketusnäytöllä.
sivulla myGameArea
Lisäämällä olioon menetelmä, joka käyttää näytön kosketuspaikan x- ja y-koordinaatteja:
实例
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); } }
Sitten, kun käyttäjä koskettaa näyttöä, voimme käyttää samaa koodia kuin hiiren osoittimen liikuttamiseen liikkua punaista laatikkoa:
实例
function updateGameArea() { myGameArea.clear(); if (myGameArea.x && myGameArea.y) { myGamePiece.x = myGameArea.x; myGamePiece.y = myGameArea.y; } myGamePiece.update(); }
Taulun ohjaimet
Voimme myös piirtää omia painikkeitamme taululle ja käyttää niitä ohjaintenä:
实例
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(); }
Lisää uusi funktio, joka määrittää, onko tietty komponentti (tässä tapauksessa painike) napsautettu。
Ensimmäinen askel on lisätä tapahtumien kuuntelijoita tarkistamaan, onko napsautettu hiiren painiketta (mousedown
ja mouseup
)。Jos haluat käsitellä kosketusnäyttöä, sinun täytyy lisätä tapahtumien kuuntelijoita tarkistamaan, onko näyttöä napsautettu (touchstart
ja touchend
):
实例
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); } }
Nyt myGameArea
Objekti saa ominaisuuden, joka kertoo napsautuksen x- ja y-koordinaatit. Käytämme näitä ominaisuuksia tarkistamaan, onko napsautus suoritettu yhdellä jostakin sinisistä painikkeista.
Tämä uusi metodi kutsutaan clicked
on component
Konstruktori-metodi, joka tarkistaa, onko komponentti napsautettu.
sivulla updateGameArea
Funktiolla, jos yksi sinisistä painikkeista napsautetaan, suoritetaan tarvittavat toimenpiteet:
实例
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(); }
- Edellinen sivu Pelielementit
- Seuraava sivu Pelin esteet