Javascript-Can';无法使设置间隔正常工作。

Javascript-Can';无法使设置间隔正常工作。,javascript,setinterval,collision,Javascript,Setinterval,Collision,这是我在这些板上的第一篇帖子,如果我做错了什么,我很抱歉。 我整天都在寻找这个问题的答案。 我正试图做一个简单的游戏,但是大肠杆菌感染的检测让我很痛苦。我不确定它有什么问题,要么是我在数组中错误地存储了敌人,要么是在检查冲突时没有正确地引用数组。任何帮助都将不胜感激 <script> var paper = Raphael(0,0,300,450); var x_Pos = 130; var y_Pos = 400; var new_Pos; var player = paper.

这是我在这些板上的第一篇帖子,如果我做错了什么,我很抱歉。 我整天都在寻找这个问题的答案。 我正试图做一个简单的游戏,但是大肠杆菌感染的检测让我很痛苦。我不确定它有什么问题,要么是我在数组中错误地存储了敌人,要么是在检查冲突时没有正确地引用数组。任何帮助都将不胜感激

<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>

var paper=Raphael(0,0300450);
var x_Pos=130;
变量y_Pos=400;
var new_Pos;
var player=paper.rect(x_Pos,y_Pos,40,5,10);
var_A=新数组();
var gold_A=新数组();
var-goldie=0;
var=1;
var\u计数=0;
var key_Down=错误;
var t_X=0;
var t_Y=0;
var k_X=0;
var k_Y=0;
//var-alive=false;
//var-next=true;
敌人;
var金;
创建_all();
函数create_all()
{
对于(变量i=0;i<45;i++)
{
var x=((Math.random()*200)+50);
敌人=纸。圆圈(x,-10,10);
敌人属性({fill:'black'});
敌人推(敌人);
var anim=Raphael.animation({cx:x,cy:500},7000);
敌人A[i].动画(动画延迟(i*500));
}
对于(var j=0;j<15;j++)
{
var x2=((Math.random()*200)+50);
金=纸。圆(x2,-10,5);
gold.attr({fill:'yellow'});
金推(金);
var anim2=Raphael.animation({cx:x2,cy:500},15000);
gold_A[j].动画(动画2.延迟(j*1000));
}
检查命中率(敌人);
}
功能检查\u命中(阵列)
{ 
var e_a=数组;
var e_abb;
对于(var m=0;m=此.Y_位置)
{ 
如果(t_X>=X_位置和&t_X 260)
{
x_Pos=260;
}
document.getElementById(“test”).innerHTML=“GOLD:+goldie+”生存左:“+LIVES;
播放动画({x:x_Pos,y:y_Pos},500);
}
document.onkeydown=函数(事件)
{
var x_Pos=player.x_Pos;
var key_Code=event.keyCode;
如果(向下键==错误)
{
如果(键代码==65 | |键代码==37)//A或左
{
按键向下=真;
新位置=x位置-5;
设置左侧播放器位置(10);
}
//当“A”键按下时,玩家每秒向左移动屏幕2个字符。
如果(键代码==68 | |键代码==39)//D或右
{
按键向下=真;
new_Pos=x_Pos+5;//var timer=setTimeout('set_Player_Pos(new_Pos)'500)}
将播放器位置设置为右(10);
}
}
}
document.onkeyup=函数(事件)
{
key_Code=null;
按键向下=错误;
}

setInterval设置一个周期性任务。您不必在处理程序中递归调用它。因此,请改用setTimeout,或者只调用setInterval一次:

setInterval(function() {
    check_Hit(enemy_A); 
}, 200);
更新:

我无法为您调试,但我可以在您的代码中看到一些问题:

  • setInterval(check_Hit,200)不会传递任何参数来检查_Hit,因此该函数将严重失败
  • 方法Array.pop()删除数组的最后一个元素,不接受任何参数
  • 你的意思是要从数组中删除第m个元素吗?如果你这样做(例如使用e_.splice(m,1)),元素m+1将取代它,在下一次迭代中,你将增加m,从而跳过一个元素

希望这会有所帮助。

谢谢您的快速回复。这确实有帮助,但碰撞只检测到一个敌方物体。知道为什么吗?