我不知道如何解决这个问题:当我把left+space按在一起时,动画就能工作了,但是当我让左按(没有离开它),然后按space (一次按左键),动画就会跳跃,但它不会向左.即使我按下其他键(要重新设置它,我必须离开),动画也会停止。有人能解释一下为什么会这样,并给我一些实际的解决办法吗?非常感谢!这是代码:
<style>
#map{
position:relative;
height:220px;
width:800px;
}
#character{
height:100px;
width:100px;
position:absolute;
bottom: 10px;
left: 0px;
z-index:1;
}
</style>
<div id="map"><div id="character"><img src="images/bart.gif"></div></div>
<script>
enableJump = true;
jump = function(){
if(enableJump){ enableJump = false;
salta = function(){
if(flagY){
posY++;
if(posY >= 90) flagY = false;
jj = document.getElementById('character').style.bottom=posY;
}
else{
posY--;
jj = document.getElementById('character').style.bottom=posY;
if(posY < 10){
flagY = true;
clearInterval(j);
enableJump = true;
up = false;
}
}
}
j = setInterval(salta,8);
}
}
up = false; dx = false;
document.onkeydown = function(evt){
code = evt.keyCode;
if(code == 32) up=true;
if(code == 39) dx=true;
moveCharacter();
}
document.onkeyup = function(evt){
code = evt.keyCode;
if(code == 32) up=false;
if(code == 39) dx=false;
}
posX = 10; posY = 10; flagY = true; var j;
moveCharacter = function(){
if(dx == true && up == true){
jump();
posX+=10;
x1 = document.getElementById('character').style.backgroundImage='url(images/character_left.gif)';
temp = document.getElementById('character').style.left=posX;
}
else if(dx){
posX+=10;
x1 = document.getElementById('character').style.backgroundImage='url(images/character_left.gif)';
temp = document.getElementById('character').style.left=posX;
}
else if(up){ jump(); }
}
</script>清除代码(没有跳转,但有相同的问题,按住左键,按下另一个键它就停止了,我必须让它重新设置)
<script>
var dx = false;
var posX = 10;
var posY = 10;
document.onkeydown = function(evt){
if(evt.keyCode == 39) dx=true;
moveCharacter();
}
document.onkeyup = function(evt){
if(evt.keyCode == 39) dx=false;
}
moveCharacter = function(){
if(dx){
posX+=10;
document.getElementById('character').style.left=posX;
}
}
</script>发布于 2012-10-02 18:43:07
最后,我解决了这个问题:函数按键,键盘,movecharacter被删除。我补充说:
var keysDown = {};
try {
if (window.addEventListener) {
window.addEventListener("keydown", function (v) {keysDown[v.keyCode] = true;}, false);
window.addEventListener("keyup", function (v) {delete keysDown[v.keyCode];}, false);
} else if (document.attachEvent) {
document.attachEvent("onkeydown", function (v) {keysDown[v.keyCode] = true;});
document.attachEvent("onkeyup", function (v) {delete keysDown[v.keyCode];});
} else if (window.attachEvent) {
window.attachEvent("onkeydown", function (v) {keysDown[v.keyCode] = true;});
window.attachEvent("onkeyup", function (v) {delete keysDown[v.keyCode];});
} else {
document.addEventListener("keydown", function (v) {keysDown[v.keyCode] = true;}, false);
document.addEventListener("keyup", function (v) {delete keysDown[v.keyCode];}, false);
}
} catch (e) {
alert("Keys don't work!\nError: "+e);
}
...
var update = function () {
if (38 in keysDown) { // Player holding up
..
}
if (40 in keysDown) { // Player holding down
..
}
if (37 in keysDown) { // Player holding left
..
}
if (39 in keysDown) { // Player holding right
..
}
};
setInterval(update,10);参考资料:http://www.lostdecadegames.com/how-to-make-a-simple-html5-canvas-game/ http://stackoverflow.com/questions/9507200/why-keydown-listener-doesnt-work-in-ie
它与Chrome,火狐,IE7/8/古怪模式(不是在文档模式IE9标准)工作,谢谢你的兴趣!
发布于 2012-10-01 15:07:55
JavaScript只在最后一个按下的键上重复keydown事件。您需要存储按下键的状态,同时侦听keydown和keyup事件。
发布于 2012-10-01 15:47:33
这可能不会回答您的问题,但会帮助您更好地设计游戏逻辑:http://jsfiddle.net/N2UYx/
https://stackoverflow.com/questions/12674236
复制相似问题