用keydown和keyup事件同时进行控制,比如有一个变量,当该按键摁下时为false,按键摁起是为true。
我的代码里你只需要修改两处就可以了。一个是preventCode,将你所需要的按键的键值存进去;另一个是 // 只执行一次 的地方,填写你所要执行的事件。
<div id="main"></div><script type="text/javascript">
(function() {
var preventCode = [13, 32, 37, 38, 39, 40] // 要只执行一次事件的按键的键值,此处屏蔽的按键依次是:enter、空格、左、上、右、下
var isRunning = [] // 不用管
document.onkeydown = keyDown
document.onkeyup = keyUp
function keyDown(event){
event = event || window.event
var keycode = event.which || event.keyCode
if(preventCode.in_array(keycode)>=0){
if(typeof isRunning[keycode] == "undefined" || isRunning[keycode]==false){
isRunning[keycode] = true
// 只执行一次的事件
var myDate = new Date()
// $("#main").html(myDate.getTime())
document.getElementById("main").innerHTML = myDate.getTime()
}
}else{
// 连续执行的事件
}
}
function keyUp(event){
event = event || window.event
var keycode = event.which || event.keyCode
if(preventCode.in_array(keycode)>=0){
isRunning[keycode] = false
}
}
// 检测数组中是否有某值
Array.prototype.in_array = function(c){
for(i=0i<this.length && this[i]!=ci++)
return (i==this.length) ? -1 : i
}
})()
</script>
这里之能通过客户端js代码控制,点击的时候将按钮状态设置为关闭,如果这样的按钮用的比较多,可以通过继承button自定义封装一个防止二次点击的按钮,
很早以前写过这东西,很简单网上可以找到资料,
效果就是点下按钮会变灰并显示“正在提交”之类的。
所有的游戏方向键控制思路都是这样的:设置变量moveX,moveY,初始值是0
监控键盘,当左键按下时moveX--,当左键松开时moveX++,右键按下时moveX++,右键松开时moveX--。上下键同理。
然后每一次游戏逻辑循环(间隔触发的事件,js可以用setInterval),根据moveX、moveY来改变被控制人物的位置。
这样就可以实现人物的平滑移动同时也能解决你所说两个按键同时按下的问题。