actualmente estoy trabajando en un juego muy simple usando Pixi.js por diversión y tengo un problema.
Necesito eliminar una instancia específica de una función del teletipo una vez que se eliminó un sprite específico del escenario.
Cuando se presiona el espacio, llamo a 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 crea un nuevo sprite, lo agrega al escenario y luego agrega moveBullet() al ticker
function moveBullet(delta, b) { // move bullet by += (-BULLETSPEED * delta) // delete bullet once out of bounds if (by < -10) { app.stage.removeChild(b); } }Estoy buscando eliminar moveBullet() del ticker una vez que la bala se haya eliminado del escenario.
Intenté colocar un ciclo while en moveBullet() que verifica si b no es nulo y establecer b en nulo después de haberlo eliminado del escenario. y luego agregar moveBullet al ticker usando addOnce() en lugar de add(). esto no funcionó.
Sé que puedo usar ticker.remove() para eliminar una marca, pero no estoy seguro de cómo eliminar una instancia específica de la función moveBullet.
¿cómo haría para hacer esto?
Lo descubrí un par de minutos después de publicarlo, así que publicaré mi solución en caso de que ayude a alguien en el futuro.
Mi error inicial fue usar el teletipo de la aplicación. En cambio, mi función createBullet() ahora crea un nuevo ticker para cada viñeta. MoveBullet() destruye ese ticker cuando la viñeta se sale de los límites.
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 by += (-BULLETSPEED * delta) // delete bullet once out of bounds and remove its ticker if (by < -10) { app.stage.removeChild(b); ticker.destroy() } }