【发布时间】:2016-12-24 14:21:39
【问题描述】:
我正在尝试使用 jquery、javascript、html 和 css 制作一个简单的游戏。我一直卡在碰撞检测上。
代码:
var map = [
[0,1,0,0,0,1,0,0,],
[0,1,0,0,0,1,0,0,],
[0,1,0,0,0,1,0,0,],
[0,1,1,1,0,1,0,0,],
[0,0,0,0,0,0,0,2,]
];
function DrawMap() {
for(var i=0; i < map.length; i++){
for(var j=0; j < map[i].length; j++){
if(parseInt(map[i][j]) == 0){
$("#container").append("<div class='air'></div>");
}
if(parseInt(map[i][j]) == 1){
$("#container").append("<div class='block'></div>");
}
if(parseInt(map[i][j]) == 2){
$("#container").append("<div class='spike'></div>");
}
}
}
}
window.onload=function() {
DrawMap();
}
更多代码:
var guy=document.getElementById('guy');
var up = 0;
var guyLeft = 0;
var health = 100;
function anim(e){
if(e.keyCode==83){
up +=10;
guy.style.top = up + 'px';
if(up >=400){
up -=10;
}
}
if(e.keyCode==87){
up -=10;
guy.style.top = up + 'px';
if(up <=0){
up +=10;
}
}
if(e.keyCode==68){
guyLeft +=10;
guy.style.left = guyLeft + 'px';
if(guyLeft >= 700){
guyLeft -= 10;
}d
}
if(e.keyCode==65){
guyLeft -=10;
guy.style.left = guyLeft + 'px';
if(guyLeft <= 0){
guyLeft += 10;
}
}
}
document.onkeydown=anim;im;
【问题讨论】:
-
document.onkeydown=anim;im;应该是 document.onkeydown=anim;我认为?你也可以在这里添加你的html代码吗?
-
从根本上说,您可能想要采取的方法是跟踪该人的位置,不仅以像素为单位,而且以
map[i][j]坐标为单位。然后您可以检查该人将进入的下一个单元格以确定他是否应该碰撞。事实上,最好只在 i、j 坐标中跟踪人的位置,然后使用函数将它们映射到显示坐标。 -
您可以先测试
if (up <= 0) { up = 0; },然后指定样式。 -
旁注: 在你的 if 子句中,改用这个:
if(e.keyCode==83){up+=10; if(up>400){up-=10;} guy.style.top=up+'px';}(点击链接)。这就是 Nina Scholz 在上述评论中的意思。 -
只是一个提示:如果你已经在使用 jQuery,那就全力以赴。它会让你的生活变得更轻松。因此,请使用所有普通 JS 的 jQuery 等效项,例如
$(window).load(function(){...});代替window.onload = function(){...};,以及$(document).keydown(function(){...});代替document.onkeydown=function(){...};等...
标签: javascript jquery html collision-detection