【发布时间】:2021-10-07 17:57:39
【问题描述】:
我正在通过游戏控制器上的 W3 学校 tutorial 并且有一个表达式 myGameArea.keys = (myGameArea.keys || []) 我无法理解,如果有人能详细解释就好了背后的逻辑是什么。
教程讲解
如果同时按下多个键怎么办?
在上面的例子中,组件只能水平或垂直移动。现在我们希望组件也沿对角线移动。
为 myGameArea 对象创建一个 keys 数组,并为每个按下的键插入一个元素,并赋予其值 true ,该值保持为 true 直到不再按下该键,该值在 keyup 事件中变为 false监听函数:
表达式的上下文
window.addEventListener('keydown', function (e) {
myGameArea.keys = (myGameArea.keys || []);
myGameArea.keys[e.keyCode] = true;
})
window.addEventListener('keyup', function (e) {
myGameArea.keys[e.keyCode] = false;
})
完整的 JavaScript 代码
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();
}
【问题讨论】:
-
如果我们还没有
myGameArea.keys,则创建它并将其初始化为[]
标签: javascript