微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在函数中创建时未定义拉斐尔元素?

如何解决在函数中创建时未定义拉斐尔元素?

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

    enemyShip.animate({
        "cx": posX-pWidth-60,},1000,"linear",function(){enemyShip.remove()})
};

然而,当我这样做时,它会导致“未捕获的参考错误:敌人船未定义”,我有什么办法可以解决这个问题?

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


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

解决方法

这可能是一个范围问题。如果您在 spawnEnemy 函数之外声明enemyShip,它可能会起作用。因为碰撞不能知道那个变量。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。