我一直在学习CreateJS,当我进入必须添加事件监听器的部分时,它就是行不通。我放入 addKey() 和 removeKey() 中的消息就是不显示。
function startGame() {
window.addEventListener("keydown", addKey, false);
window.addEventListener("keyup", removeKey, false);
console.log("added listeners");
createjs.Ticker.setFPS(60);
createjs.Ticker.addEventListener("tick", tick);
}
function addKey(e) {
console.log("RUN!");
e = !e ? window.event : e;
var index = KEYS_ALLOWED.indexOf(e.keyCode);
if (true) {
keysPressed.push(e.keyCode);
}
}
function removeKey(e) {
console.log("RUN!");
e = !e ? window.event : e;
var index = keysPressed.indexOf(e.keyCode);
if (index > -1) {
keysPressed.splice(index, 1);
}
}
编辑:是的,startGame 正在被调用。我把它放在this中,当body加载时调用:
function init() {
canvas = document.getElementById("canvas");
stage = new createjs.Stage(canvas);
console.log("created stage");
createAssets();
placeAssets();
startGame();
}
顺便说一下,如果我把它放在上面,它似乎可以工作
document.addEventListener
而不是
window.addEventListener
虽然我使用的书使用了后者。这是有原因的吗?如果我继续使用前者,会对我产生负面影响吗?
最佳答案
在您的情况下,应该没有特别的理由选择 window.addEventListener
而不是 document.addEventListener
,反之亦然,因为两者都应该产生相同的事件对象(例如,在您的案例),并且在我测试您的代码时这样做了。
使用此处的答案作为引用:Difference between document.addEventListener and window.addEventListener?
您会注意到“该事件将在窗口对象之前触发文档对象,因为它在层次结构中首先发生,但这种差异通常并不重要,因此您可以选择其中一个”。因此,如果您继续使用 document.addEventListener,它不会对您产生负面影响。
请注意(也来自链接的问题):“由于“单击”事件在文档和窗口中都可用,并且如果我们在文档和窗口上注册事件,则文档的单击处理程序首先触发,然后是窗口。所以对于这种观点选择文件比较好。”简而言之,从性能 Angular 来看,使用 document.addEventListener 会稍微好一些。
关于javascript - addEventListener 在 CreateJS 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23680381/