我一直在学习CreateJS,当我去这个必须添加eventlistener的部分时,它就无法工作了。我放在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被调用了。我把它放在这个,当身体加载时调用:
function init() {
canvas = document.getElementById("canvas");
stage = new createjs.Stage(canvas);
console.log("created stage");
createAssets();
placeAssets();
startGame();
}
顺便说一下,如果我把它放在
上似乎有效 document.addEventListener
而不是
window.addEventListener
虽然我使用的书使用了后者。是否有这样的理由,如果我只是使用前者按下它会对我产生负面影响吗?
答案 0 :(得分:0)
在您的情况下,应该没有特别的理由更喜欢window.addEventListener
而不是document.addEventListener
,反之亦然,因为两者都应该生成相同的事件对象(在您的情况下为e),并在我测试您的代码时这样做
使用此处的答案作为参考:Difference between document.addEventListener and window.addEventListener?
您会注意到“事件将在窗口对象之前点击文档对象,因为它首先出现在层次结构中,但这种差异通常是无关紧要的,因此您可以选择”。因此,如果继续使用document.addEventListener,它不会对您产生负面影响。
请注意(也来自链接的问题):“因为'click'事件在文档和窗口中都可用,如果我们在文档和窗口上都注册了事件,那么文档的点击处理程序会先触发窗口。所以对于这种观点选择文件更好。“简而言之,在性能方面,与document.addEventListener一起使用会稍好一些。