从代码中删除函数的特定实例
Removing a specific instance of a function from ticker
目前正在使用 Pixi.js 开发一款非常简单的游戏,只是为了好玩,我 运行 遇到了问题。
一旦从舞台上删除了特定精灵,我需要从代码中删除函数的特定实例。
当按下 space 时,我调用 createBullet()
function createBullet(sheet, sprite) {
const bullet = new PIXI.Sprite(sheet.textures["sample.png"]);
bullet.x = sprite.x
bullet.y = sprite.y + 10
bullet.height = bullet.height / 5
bullet.width = bullet.width / 5
app.stage.addChild(bullet);
bullet.ticker.add((delta) => { moveBullet(delta, bullet) })
}
createBullet 创建一个新精灵,将其添加到舞台,然后将 moveBullet() 添加到代码
function moveBullet(delta, b) {
// move bullet
b.y += (-BULLETSPEED * delta)
// delete bullet once out of bounds
if (b.y < -10)
{
app.stage.removeChild(b);
}
}
一旦子弹的移动已从舞台上移除,我希望从自动收报机中移除 moveBullet()。
我尝试在 moveBullet() 中放置一个 while 循环来检查 b 是否不为空,并在它从舞台上移除后将 b 设置为空。然后使用 addOnce() 而不是 add() 将 moveBullet 添加到代码中。这没有用。
我知道我可以使用 ticker.remove() 删除勾号,但我不确定如何删除 moveBullet 函数的特定实例。
我该怎么做?
我在 post 几分钟后就弄明白了,所以我会 post 我的解决方案,以防将来它对任何人有帮助。
我最初的错误是使用了 app ticker。相反,我的 createBullet() 函数现在为每个项目符号创建一个新的代码。当子弹移出边界时,该自动收报机被 moveBullet() 销毁。
function createBullet(sheet, sprite) {
const bullet = new PIXI.Sprite(sheet.textures["sample.png"]);
bullet.x = sprite.x
bullet.y = sprite.y + 10
bullet.height = bullet.height / 5
bullet.width = bullet.width / 5
app.stage.addChild(bullet);
const bullet_ticker = new PIXI.Ticker
bullet_ticker.add((delta) => { moveBullet(delta, bullet, bullet_ticker) })
bullet_ticker.start()
}
function moveBullet(delta, b, ticker) {
// move bullet
b.y += (-BULLETSPEED * delta)
// delete bullet once out of bounds and remove its ticker
if (b.y < -10)
{
app.stage.removeChild(b);
ticker.destroy()
}
}
目前正在使用 Pixi.js 开发一款非常简单的游戏,只是为了好玩,我 运行 遇到了问题。
一旦从舞台上删除了特定精灵,我需要从代码中删除函数的特定实例。
当按下 space 时,我调用 createBullet()
function createBullet(sheet, sprite) {
const bullet = new PIXI.Sprite(sheet.textures["sample.png"]);
bullet.x = sprite.x
bullet.y = sprite.y + 10
bullet.height = bullet.height / 5
bullet.width = bullet.width / 5
app.stage.addChild(bullet);
bullet.ticker.add((delta) => { moveBullet(delta, bullet) })
}
createBullet 创建一个新精灵,将其添加到舞台,然后将 moveBullet() 添加到代码
function moveBullet(delta, b) {
// move bullet
b.y += (-BULLETSPEED * delta)
// delete bullet once out of bounds
if (b.y < -10)
{
app.stage.removeChild(b);
}
}
一旦子弹的移动已从舞台上移除,我希望从自动收报机中移除 moveBullet()。
我尝试在 moveBullet() 中放置一个 while 循环来检查 b 是否不为空,并在它从舞台上移除后将 b 设置为空。然后使用 addOnce() 而不是 add() 将 moveBullet 添加到代码中。这没有用。
我知道我可以使用 ticker.remove() 删除勾号,但我不确定如何删除 moveBullet 函数的特定实例。
我该怎么做?
我在 post 几分钟后就弄明白了,所以我会 post 我的解决方案,以防将来它对任何人有帮助。
我最初的错误是使用了 app ticker。相反,我的 createBullet() 函数现在为每个项目符号创建一个新的代码。当子弹移出边界时,该自动收报机被 moveBullet() 销毁。
function createBullet(sheet, sprite) {
const bullet = new PIXI.Sprite(sheet.textures["sample.png"]);
bullet.x = sprite.x
bullet.y = sprite.y + 10
bullet.height = bullet.height / 5
bullet.width = bullet.width / 5
app.stage.addChild(bullet);
const bullet_ticker = new PIXI.Ticker
bullet_ticker.add((delta) => { moveBullet(delta, bullet, bullet_ticker) })
bullet_ticker.start()
}
function moveBullet(delta, b, ticker) {
// move bullet
b.y += (-BULLETSPEED * delta)
// delete bullet once out of bounds and remove its ticker
if (b.y < -10)
{
app.stage.removeChild(b);
ticker.destroy()
}
}