目前正在使用Pixi.js玩一个非常简单的游戏,我遇到了一个问题。
一旦从舞台上删除了一个特定的sprite,我就需要从滴答器中删除一个函数的特定实例。
当空格按下时,我调用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是否为null,并在b从舞台上删除后将b设置为null。然后使用moveBullet ()而不是add()将addOnce添加到代码块中。这是行不通的。
我知道我可以使用ticker.remove()删除一个滴答,但我不知道如何删除moveBullet函数的一个特定实例。
我该怎么做呢?
发布于 2021-10-10 20:08:21
我在发帖几分钟后发现了这个问题,所以我会发布我的解决方案,以防它对未来的任何人有所帮助。
我的第一个错误是使用应用程序滴答器。相反,我的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()
}
}https://stackoverflow.com/questions/69518512
复制相似问题