键控产生意外结果.HTML5游戏
Keydown producing unexpected result. HTML5 Game
因此,我正处于在html5中创建我的第一款平台风格游戏的最初阶段。到目前为止,我只实现了左右移动,没有"重力"或碰撞检测。
然而,我已经遇到了一个问题。
如果你在短时间内向左或向右移动,"角色"会按预期行事(我使用角色的方式很松散,因为它是实际移动的地图)。但是,如果您按住该键,则地图移动过快。
我认为问题是keydown事件监听器一直在监听,因为移动地图是在游戏的每一个节拍或帧之前移动的。
所以我的问题是,我如何才能让关键点向下只在游戏的每一次滴答声(20毫秒)增加地图偏移量。
这是我的JSFiddle:点击这里
document.addEventListener('keydown',function(event){
var dir = event.which;
if(dir == directions.LEFT){
mapOffsetX += mapOffsetDistanceX;
event.preventDefault();
};
if(dir == directions.RIGHT){
mapOffsetX -= mapOffsetDistanceX;
event.preventDefault();
};
});
document.addEventListener('keyup',function(event){
var dir = event.which;
if(dir == directions.LEFT){
mapOffsetX -= mapOffsetDistanceX;
};
if(dir == directions.RIGHT){
mapOffsetX += mapOffsetDistanceX;
};
});
initFloorObject(100,c.height/2,300,20,0,0,0,1);
var myInt = setInterval(function(){
clearScreen();
for(var i=0;i<floorObject.length;i++){
floorObject[i][0] = parseInt(floorObject[i][0])+mapOffsetX;
};
drawChar();
drawFloorObjects();
},20);
每次keydown
时将变量设置为false
,并每20毫秒将其设置回true
。
var isKeydownAvailable = true;
document.addEventListener('keydown', function (event) {
var dir = event.which;
if(isKeydownAvailable){
if (dir == directions.LEFT) {
mapOffsetX += mapOffsetDistanceX;
event.preventDefault();
};
if (dir == directions.RIGHT) {
mapOffsetX -= mapOffsetDistanceX;
event.preventDefault();
};
isKeydownAvailable = false;
};
});
在间隔中,将isKeydownAvailable
重置为true
。
var myInt = setInterval(function () {
clearScreen();
for (var i = 0; i < floorObject.length; i++) {
floorObject[i][0] = parseInt(floorObject[i][0]) + mapOffsetX;
};
drawChar();
drawFloorObjects();
isKeydownAvailable = true;
}, 20);
对操作使用布尔值,并在间隔内检查它们
在按下键时,将布尔值isMovingLeft
设置为true,然后在区间函数中仅添加if(isMovingLeft)
的偏移量。在其他动作中做到这一点,你就可以继续了。
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 奇怪的Javascript结果
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- HTML5音频加载和播放获胜'我不能在iPad上工作
- html5 Canvas getImageData 或 toDataURL 的结果 - 占用更多内存
- HTML5 文件阅读器如何返回结果
- 键控产生意外结果.HTML5游戏
- 为什么 HTML5 checkValidity() 从 JavaScript regexp.test() 返回不同的结果
- 有没有办法在不使用表单的情况下计算数字并在HTML5中显示结果
- HTML5 语音 API - 重置结果数组
- HTML5 Javascript画布旋转JSFiddle赢得't以相同的结果运行相同的代码
- 将Javascript for循环的结果写入HTML5表中
- 如何将JavaScript函数(canPlayType)的结果传递给HTML5视频
- 我发现如何改变html5源标签的视频源(src),但在函数内或与内联javascript得到不同的结果
- 无法收集HTML5语音识别API的结果
- 我如何使我的JS/HTML5计算器's结果多行
- HTML5 canvas putImageData似乎与像素混淆,没有得到预期的结果
- 不一致的HTML5画布结果
- 如何通过AJAX将HTML5 sqlite结果集发送到服务器
- HTML5地理定位结果移出我的网页 - 如何阻止它