Ελεγκτής Παιχνιδιού
- Προηγούμενη Σελίδα Συστατικά Παιχνιδιού
- Επόμενη Σελίδα Κίνδυνος Παιχνιδιού
按下按钮可移动红色方块:
掌控一切
现在我们要控制红色方块。
添加四个按钮:上、下、左、右。
为每个按钮编写一个函数,以沿选定方向移动组件。
at component
构造函数中创建两个新属性,并将它们命名为 speedX
και speedY
。这些属性被用作速度指示器。
at component
构造函数中添加一个名为 newPos()
的函数,该函数使用 speedX
και speedY
属性来更改组件的位置。
在绘制组件之前,从 updateGameArea
函数调用 newPos
函数:
instance
<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()">Πάνω</button> <button onclick="movedown()">Κάτω</button> <button onclick="moveleft()">Αριστερά</button> <button onclick="moveright()">Δεξιά</button>
Σταμάτημα κίνησης
Αν χρειάζεται, μπορείτε να σταματήσετε το κόκκινο κουτί όταν απελευθερώνετε το κουμπί.
Προσθέστε μια συνάρτηση που ρυθμίζει τον δείκτη ταχύτητας σε 0.
Για να αντιμετωπίσουμε τα κανονικά οθόνες και τα οθόνες لمψης, θα προσθέσουμε κώδικα για τα δύο είδη συσκευών:
instance
function stopMove() { myGamePiece.speedX = 0; myGamePiece.speedY = 0; } </script> <button onmousedown="moveup()" onmouseup="stopMove()" ontouchstart="moveup()">Πάνω</button> <button onmousedown="movedown()" onmouseup="stopMove()" ontouchstart="movedown()">Κάτω</button> <button onmousedown="moveleft()" onmouseup="stopMove()" ontouchstart="moveleft()">Αριστερά</button> <button onmousedown="moveright()" onmouseup="stopMove()" ontouchstart="moveright()">Δεξιά</button>
το πληκτρολόγιο ως ελεγκτής
μπορούμε επίσης να ελέγχουμε τον κόκκινο κουτί με τα πλήκτρα κατεύθυνσης του πληκτρολογίου.
γίνεται η δημιουργία μιας μεθόδου για τον έλεγχο αν πατήθηκε κάποιο κλειδί και θα myGameArea
του αντικειμένου κλειδί
η ιδιότητα ρυθμίζεται ως κωδικόν κλειδί. Όταν απελευθερώνεται η κουμπίδα, θα κλειδί
η ιδιότητα ρυθμίζεται ως false
:
instance
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); } }
Όπως αυτό, αν πατηθεί ένας από τους πλήκτες κατεύθυνσης, μπορούμε να κινήσουμε το κόκκινο κουτί:
instance
function updateGameArea() { myGameArea.clear(); myGamePiece.speedX = 0; myGamePiece.speedY = 0; Εάν (myGameArea.key και myGameArea.key == 37) {myGamePiece.speedX = -1; } Εάν (myGameArea.key και myGameArea.key == 39) {myGamePiece.speedX = 1; } Εάν (myGameArea.key και myGameArea.key == 38) {myGamePiece.speedY = -1; } Εάν (myGameArea.key και myGameArea.key == 40) {myGamePiece.speedY = 1; } myGamePiece.newPos(); myGamePiece.update(); }
Πιέστε πολλαπλά κουμπιά
Πιέστε πολλαπλά κουμπιά
Τι γίνεται αν πατηθούν πολλαπλά κουμπιά ταυτόχρονα;
Για παράδειγμα, στο παραπάνω παράδειγμα, το στοιχείο μπορεί να κινείται μόνο οριζόντια ή κάθετα. Τώρα θέλουμε να μπορεί να κινείται και διαγώνια. myGameArea
Ορίζεται ένας keys
Μια λίστα, και για κάθε πιεσμένο κουμπί εισάγεται ένα στοιχείο και του δίνεται τιμή true
,η τιμή παραμένει true μέχρι να σταματήσει η πίεση του κουμπιού, η τιμή είναι στο keyup
Η λειτουργία παρακολούθησης γεγονότων μεταβάλλεται σε false
:
instance
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; Εάν (myGameArea.keys και myGameArea.keys[37]) {myGamePiece.speedX = -1; } Εάν (myGameArea.keys και myGameArea.keys[39]) {myGamePiece.speedX = 1; } Εάν (myGameArea.keys και myGameArea.keys[38]) {myGamePiece.speedY = -1; } if (myGameArea.keys && myGameArea.keys[40]) {myGamePiece.speedY = 1; } myGamePiece.newPos(); myGamePiece.update(); }
使用鼠标光标作为控制器
如果您想使用鼠标光标控制红色方块,请在 myGameArea
向对象中添加一个方法来更新鼠标光标的 x 和 y 坐标:
instance
var myGameArea = { canvas : document.createElement("canvas"), start : function() { this.canvas.width = 480; this.canvas.height = 270; this.canvas.style.cursor = "none"; //隐藏原始光标 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); } }
然后我们就可以使用鼠标光标移动红色方块了:
instance
function updateGameArea() { myGameArea.clear(); if (myGameArea.x && myGameArea.y) { myGamePiece.x = myGameArea.x; myGamePiece.y = myGameArea.y; } myGamePiece.update(); }
触摸屏幕来控制游戏
我们还可以在触摸屏上控制红色方块。
at myGameArea
向对象中添加一个方法,该方法使用屏幕触摸位置的 x 和 y 坐标:
instance
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); } }
然后,当用户触摸屏幕时,我们可以使用与鼠标光标相同的代码来移动红色方块了:
instance
function updateGameArea() { myGameArea.clear(); if (myGameArea.x && myGameArea.y) { myGamePiece.x = myGameArea.x; myGamePiece.y = myGameArea.y; } myGamePiece.update(); }
画布上的控制器
我们可以绘制自己的按钮在画布上,并将它们用作控制器:
instance
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(); }
Προσθέστε μια νέα συνάρτηση για να καθορίσετε αν ένα στοιχείο (στο παράδειγμα αυτό ένα κουμπί) έχει κλικ.
Πρώτα προσθέστε παρατηρητές γεγονότων για να ελέγξετε αν κλικάστηκε ο κουμπί του ποντικιού (mousedown
και mouseup
)。Για να αντιμετωπίσετε τα οθόνη αφής, πρέπει να προσθέσετε παρατηρητές γεγονότων για να ελέγξετε αν η οθόνη κλικ.touchstart
και touchend
):
instance
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); } }
Τώρα myGameArea
Το αντικείμενο έχει ιδιότητες που μας πληροφορούν για τις συντεταγμένες x και y του κλικ. Χρησιμοποιούμε αυτές τις ιδιότητες για να ελέγξουμε αν το κλικ έγινε σε έναν από τους μπλε κουμπιά μας.
Αυτή η νέα μέθοδος ονομάζεται clicked
είναι component
Μια μέθοδος του κατασκευαστή που ελέγχει αν το στοιχείο έχει κλικ.
at updateGameArea
within the function, if one of the blue buttons is clicked, we will perform the necessary operations:
instance
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(); }
- Προηγούμενη Σελίδα Συστατικά Παιχνιδιού
- Επόμενη Σελίδα Κίνδυνος Παιχνιδιού