在函数中创建时未定义拉斐尔元素?
Raphael Elements Undefined when Created in a Function?
我正在使用 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");
};
};
这可能是范围问题。如果您在 spawnEnemy 函数之外声明 enemyShip,它可能会起作用。因为碰撞无法按原样知道该变量。
我也会稍微改变一下你的碰撞函数,让它适用于任何 2 object/entities,所以与其被迫使用 playerCircle 和 enemyShip,不如使用 a & b 及其属性和该函数中没有任何硬编码引用。
我正在使用 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");
};
};
这可能是范围问题。如果您在 spawnEnemy 函数之外声明 enemyShip,它可能会起作用。因为碰撞无法按原样知道该变量。
我也会稍微改变一下你的碰撞函数,让它适用于任何 2 object/entities,所以与其被迫使用 playerCircle 和 enemyShip,不如使用 a & b 及其属性和该函数中没有任何硬编码引用。