Javascript Raphael元素在函数中创建时未定义?

Javascript Raphael元素在函数中创建时未定义?,javascript,undefined,raphael,collision,Javascript,Undefined,Raphael,Collision,我正在使用Raphael元素创建一个小游戏,当玩家用“子弹”撞击时,它会创建一个弹出窗口,到目前为止,如果我正常创建每个元素,代码会相应地工作。例如,这: let playerCircle = paper.circle(100, 3*pHeight/10, 15).attr({ "fill": "black" }); let enemyShip = paper.circle(100, 100, 15).attr({ "fill&

我正在使用Raphael元素创建一个小游戏,当玩家用“子弹”撞击时,它会创建一个弹出窗口,到目前为止,如果我正常创建每个元素,代码会相应地工作。例如,这:

let playerCircle = paper.circle(100, 3*pHeight/10, 15).attr({
    "fill": "black"
});

let enemyShip = paper.circle(100, 100, 15).attr({
    "fill": "red",
    "stroke": "black",
});
然而,我希望在点击玩家圈时产生“敌人”,我现在有以下代码:

let spawnEnemy = function(ev){
    let posX = random(pWidth, pWidth+30);
    let posY = random(0, 3*pHeight/5-30);

    let enemyShip = paper.circle(posX, posY, 15).attr({
    "fill": "red",
    "stroke": "black",
    });

    enemyShip.animate({
        "cx": posX-pWidth-60,
    }, 1000, "linear", function(){enemyShip.remove()})
};
然而,当我这样做时,它会导致“未捕获的引用错误:未定义Enemmyship”,我可以用什么方法修复它吗

不确定此信息是否有用,但这是注册冲突的代码:


let collision = function(a, b){
    a = {
        "x": a.attr("cx"),
        "y": a.attr("cy"),
    };

    b = {
        "x": b.attr("cx"),
        "y": b.attr("cy"),
    };

    let d = distance(a, b);

    if (d < playerCircle.attr("r") + enemyShip.attr("r")){
        alert("hi");
    };
};

让碰撞=函数(a,b){
a={
“x”:a.attr(“cx”),
“y”:a.attr(“cy”),
};
b={
“x”:b.attr(“cx”),
“y”:b.attr(“cy”),
};
设d=距离(a,b);
如果(d
这可能是一个范围问题。如果您在“繁殖敌人”函数之外声明“enemyShip”,它可能会起作用。因为我们不知道这个变量是什么

我还将稍微更改碰撞函数,使其适用于任意2个对象/实体,因此,与其强制使用playerCircle和enemyShip,不如使用a&b及其属性,而不要在该函数中使用任何硬编码引用