如何使函数使用在另一个函数JavaScript / jQuery

时间:2017-06-22 12:46:53

标签: javascript jquery

所以,我有一个名为inimigo的var,它是在setInterval()的函数中声明的,但在另一个名为checkcolisions的函数中声明我希望得到inimigo的位置所以我可以检查与他和bala的碰撞,我可以通过在动画之后声明函数来获得bala的位置,如你所见。经过多次尝试后,ckeckcolision始终显示inimigo未定义"。如何获得inimigo的位置并检查与bala位置的碰撞?如果你有更好的方法来检查两者之间的碰撞,请告诉我,我会真的接受它们。谢谢你的时间。

$(document).ready(function() {
    "use strict";
    $(document).on('keydown', function(e) {

        var kp = e.keyCode;
        var carro = $("#carro");
        var bala = $("#bala");
        e.preventDefault();



        if (kp === 37 && carro.position().left > -500) {
            carro.css("left", (carro.position().left - 7) + "px");
        }

        if (kp === 39 && carro.position().left < 350) {
            carro.css("left", (carro.position().left + 7) + "px");
        }

        if (kp === 32) {

            bala.show();
            bala.css('left', (carro.offset().left + 67) + "px");
            bala.css('top', (carro.offset().top - 20) + "px");


            bala.animate({
                "top": "-=100px"
            }, "fast", checkCollisions);

        }
    });

    var counter2 = 0;
    var j = setInterval(function() {


        var inimigo = $(".inimigo").clone();
        $('.jogo2').html(inimigo);

        inimigo.css('left', (Math.floor(Math.random() * 200) + 550));
        inimigo.css('top', "150px");



    }, 2000);

    function getPositions(disparo) {
        var $disparo = $(disparo);
        var pos = $disparo.position();
        var width = $disparo.width();
        var height = $disparo.height();
        return [
            [pos.left, pos.left + width],
            [pos.top, pos.top + height]
        ];
    }

    function comparePositions(p1, p2) {
        var x1 = p1[0] < p2[0] ? p1 : p2;
        var x2 = p1[0] < p2[0] ? p2 : p1;
        return x1[1] > x2[0] || x1[0] === x2[0] ? true : false;
    }


    function checkCollisions() {
        var disparo = inimigo;
        var pos = getPositions(disparo);

        var pos2 = getPositions(this);
        var horizontalMatch = comparePositions(pos[0], pos2[0]);
        var verticalMatch = comparePositions(pos[1], pos2[1]);
        var match = horizontalMatch && verticalMatch;
        if (match) {

            alert("score +1");
        }
    }

});

3 个答案:

答案 0 :(得分:1)

您需要在外部上下文中声明一个可由两个函数访问的变量:

var inimigo = null;
var counter2 = 0;
var j = setInterval(function() {
  inimigo = $(".inimigo").clone();
  $('.jogo2').html(inimigo);
  inimigo.css('left', (Math.floor(Math.random() * 200) + 550));
  inimigo.css('top', "150px");
}, 2000);

答案 1 :(得分:0)

您可以全局定义inimigo变量,以便您可以访问任何功能。只要任何函数访问该变量,就会考虑最近更改的值。

答案 2 :(得分:0)

您可以拥有全局变量。如果要访问特定于方法的变量,可以尝试这个例子,例如。

function y(){
    var x = 10;
    return { 
        get : function(){ 
                return x;
            } 
    } 
}

` 你可以访问

Y()得到();