[英]Javascript - Can't get SetInterval to work correctly.
this is my first post on these boards, sorry if I've done anything wrong. 这是我在这些主板上的第一篇文章,对不起,如果我做错了什么。 I've been searching all day for the answer to this question.
我整天都在寻找这个问题的答案。 I'm trying to make a simple game, but the colission detection is killing me.
我正在尝试制作一个简单的游戏,但大肠菌的检测使我丧命。 I'm not sure what the issue is with it, it's either I'm storing the enemies incorrectly in the array, or not referencing the array correctly when I'm checking for collision.
我不确定问题出在哪里,要么是我在阵列中错误地存储了敌人,要么是在检查碰撞时未正确引用阵列。 Any help would be greatly appreciated.
任何帮助将不胜感激。
<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>
setIntervals sets a periodic task. setIntervals设置定期任务。 You don't have to call it recursively in your handler.
您不必在处理程序中递归调用它。 So either use setTimeout instead, or call setInterval only once:
因此,要么改用setTimeout,要么只调用一次setInterval:
setInterval(function() {
check_Hit(enemy_A);
}, 200);
UPDATE: 更新:
Well I can't debug this for you but I can see a few issues in your code: 好吧,我无法为您调试此操作,但是我可以在您的代码中看到一些问题:
Hope this will help. 希望这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.