所以,我有一个名为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");
}
}
});
答案 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()得到();