从代码中删除函数的特定实例

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