【问题标题】:Raphael Elements Undefined when Created in a Function?在函数中创建时未定义 Raphael 元素?
【发布时间】:2021-06-18 05:13:01
【问题描述】:

我正在使用 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",
});

但是,我希望“enemyShip”在点击玩家圈时产生,我有这个当前代码:

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()})
};

但是,当我这样做时,会导致“未捕获的引用错误:未定义enemyShip”,我有什么办法可以解决这个问题?

不确定这些信息是否有帮助,但这是注册碰撞的代码:


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");
    };
};

【问题讨论】:

    标签: javascript undefined raphael collision


    【解决方案1】:

    这可能是范围问题。如果您在 spawnEnemy 函数之外声明enemyShip,它可能会起作用。因为碰撞无法按原样知道该变量。

    我也会稍微改变一下你的碰撞函数,让它适用于任何 2 个对象/实体,所以不要强迫它使用 playerCircle 和enemyShip,只需使用 a & b 及其属性,而不是任何硬编码该函数中的引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 2013-07-09
      相关资源
      最近更新 更多