这是我在这些主板上的第一篇文章,对不起,如果我做错了什么。 我一整天都在寻找这个问题的答案。 我试图制作一个简单的游戏,但是这种分裂检测正在扼杀我。我不确定它的问题是什么,它是我在数组中错误地存储敌人,还是在我检查碰撞时没有正确引用数组。任何帮助将不胜感激。
<script>
var paper = Raphael(0,0,300,450);
var x_Pos = 130;
var y_Pos = 400;
var new_Pos;
var player = paper.rect(x_Pos,y_Pos,40,5,10);
var enemy_A = new Array();
var gold_A = new Array();
var goldie = 0;
var lives = 1;
var enemy_Count = 0;
var key_Down = false;
var t_X = 0;
var t_Y = 0;
var k_X = 0;
var k_Y = 0;
//var alive = false;
//var next = true;
var enemy;
var gold;
create_all();
function create_all()
{
for (var i = 0; i < 45; i++)
{
var x = ((Math.random()*200)+50);
enemy = paper.circle(x, -10, 10);
enemy.attr({fill: 'black'});
enemy_A.push(enemy);
var anim = Raphael.animation({cx:x, cy:500},7000);
enemy_A[i].animate(anim.delay(i*500));
}
for (var j = 0; j < 15; j++)
{
var x2 = ((Math.random()*200)+50);
gold = paper.circle(x2, -10, 5);
gold.attr({fill: 'yellow'});
gold_A.push(gold);
var anim2 = Raphael.animation({cx:x2, cy:500},15000);
gold_A[j].animate(anim2.delay(j*1000));
}
check_Hit(enemy_A);
}
function check_Hit(array)
{
var e_a = array;
var e_abb;
for (var m = 0; m < e_a.length ; m++)
{
e_abb = e_a[m].getBBox();
t_X = e_abb.x + e_abb.width/2;
t_Y = e_abb.y + e_abb.height/2;
if (t_Y >= this.y_Pos)
{
if (t_X >= x_Pos && t_X <= x_Pos + 40)
{
damageHealth();
e_a[m].remove();
e_a.pop(m);
}
}
}setInterval(check_Hit, 200);
}
function collectGold()
{
this.goldie = goldie + 10;
}
function damageHealth()
{
this.lives = lives - 1;
if (lives == 0)
{
//alive = false;
}
}
function set_Player_Pos_Left(x)
{
x_Pos = x_Pos - x;
if (x_Pos < 0)
{
x_Pos = 0;
}
document.getElementById("test").innerHTML = "GOLD: " + goldie + "LIVES LEFT: " + lives;
player.animate({x:x_Pos,y:y_Pos},500);
}
function set_Player_Pos_Right(x)
{
x_Pos = x_Pos + x;
if(x_Pos > 260)
{
x_Pos = 260;
}
document.getElementById("test").innerHTML = "GOLD: " + goldie + " LIVES LEFT: " + lives;
player.animate({x:x_Pos,y:y_Pos},500);
}
document.onkeydown = function(event)
{
var x_Pos = player.x_Pos;
var key_Code = event.keyCode;
if (key_Down == false)
{
if (key_Code == 65 || key_Code == 37) //A OR LEFT
{
key_Down = true;
new_Pos = x_Pos - 5;
set_Player_Pos_Left(10);
}
//Whilst 'A' key is down, player moves left screen 2 co-ords a second.
if (key_Code == 68 || key_Code == 39) //D OR RIGHT
{
key_Down = true;
new_Pos = x_Pos + 5; //var timer = setTimeout('set_Player_Pos(new_Pos)',500);}
set_Player_Pos_Right(10);
}
}
}
document.onkeyup = function(event)
{
key_Code = null;
key_Down = false;
}
</script>
答案 0 :(得分:1)
setIntervals设置定期任务。您不必在处理程序中以递归方式调用它。所以要么使用setTimeout,要么只调用一次setInterval:
setInterval(function() {
check_Hit(enemy_A);
}, 200);
更新:
我无法为您调试此内容,但我可以在您的代码中看到一些问题:
希望这会有所帮助。