Entonces, estoy creando un juego con Phaser 3 que necesitará un movimiento de "clic para mover", pero no puedo usar la física, así que quiero cambiarlo y usar una interpolación para que el jugador se mueva a la posición en la que se hizo clic (" haga clic para mover"). Este era el código que estaba usando que usaba física:
var target = new Phaser.Math.Vector2(); preload(){ this.load.image("image", "assets/image.png"); } create(){ player = this.physics.add.sprite(400, 350, "image"); this.input.on('pointerup', function (pointer) { target.x = pointer.x; target.y = pointer.y; // Move at 200 px/s: this.physics.moveToObject(player, target, 200); }, this); } update(){ var distance = Phaser.Math.Distance.Between(player.x, player.y, target.x, target.y); if (player.body.speed > 0) { // 4 is our distance tolerance. The faster it moves, the more tolerance is required. if (distance < 4) { player.body.reset(target.x, target.y); player.anims.stop(); } } }Intenté hacerlo (usando tween), y funciona pero no como esperaba, los resultados son muy diferentes del primer código que usó física, se mueve mucho más rápido y el objeto (jugador) sigue teletransportándose a la x y original del tween. y. Esto es lo que probé:
var tween; var target = new Phaser.Math.Vector2(); preload(){ this.load.image("image", "assets/image.png"); } create(){ player = this.add.sprite(400, 300, "image"); tween = this.tweens.add({ targets: player, x: 400, y: 300, ease: 'Power1', duration: -1, paused: true }); this.input.on('pointerdown', function (pointer) { target.x = pointer.x target.y = pointer.y tween.play(); }); } update(){ if (tween.isPlaying()) { tween.updateTo('x', target.x, true); tween.updateTo('y', target.y, true); } }