如何在函数调用中自动添加参数?

时间:2014-11-27 20:55:04

标签: javascript jquery collision

我是初学者,我在js / jquery做了一个小游戏。

我让每个X秒(并获得一个唯一身份证)产生的敌人越过了窗户。然后我想与我制作的太空船发生冲突。我在这里遇到的问题是,每次一个敌人产生与前一个敌人的碰撞是不可能的(只能与最后产生的敌人发生碰撞)所以我想知道我是否创建一个函数来创建一个线路调用碰撞功能每次敌人产卵它都会起作用:/

function newEnemy(enemyId) {
    var imgElement = $('<img>', {
    src: 'enemy.png',
    id: 'enemy' + enemyId,
    }
return { // Object containing properties of an enemy
    id: enemyId,
}

$(function(){ //make enemies appear
     setInterval(function() {     
        var id = ++enemyIdCounter;
        var baddie = newEnemy(id);
        enemies[id] = baddie;
        $(document.body).append(baddie.img);

    setInterval(function() { // move of an enemy

你可以忽略这段代码(只要你想知道我在这下做了什么) 最后一个setInterval(function(){...},20);包含下一个代码

function collision($ship, $baddie) {
    var x1 = $ship.offset().left;
    var y1 = $ship.offset().top;
    var h1 = $ship.outerHeight(true);
    var w1 = $ship.outerWidth(true);
    var b1 = y1 + h1;
    var r1 = x1 + w1;
    var x2 = $baddie.offset().left;
    var y2 = $baddie.offset().top;
    var h2 = $baddie.outerHeight(true);
    var w2 = $baddie.outerWidth(true);
    var b2 = y2 + h2;
    var r2 = x2 + w2;

    if (b1 < y2 || y1 > b2 || r1 < x2 || x1 > r2){
        return false;
    }else{
        return true;
    }
}

这里是与最后一个敌人发生碰撞的实际线路

    $('#result').text(collision($('#ship'), $('#enemy' + baddie.id)));

这是我尝试但没有工作(当然因为我做得不好) 所以这是本文标题中的问题,如何自动添加第二个参数以及如何正确编写

    $('#result').text(collision($('#ship'), $('#enemy1')));
    $('#result').text(collision($('#ship'), $('#enemy2')));
    $('#result').text(collision($('#ship'), $('#enemy3')));
    $('#result').text(collision($('#ship'), $('#enemy4')));

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

你已经有一系列敌人enemies[]

要检查所有碰撞,请执行以下操作:

 var hasCollided = false;
 $.each(enemies, function(index, value) {
     hasCollided = (hasCollided || collision($('#ship'), value.img)));
 });
 $('#result').text(hasCollided);

请记住,当enemies[]阵列中的敌人被摧毁时,将其移除。