Tengo un sprite que funciona como un botón, pero cuando lo presionas, se duplica y te permite arrastrar el duplicado. Casi lo tengo funcionando, sin embargo, actualmente debe hacer clic primero para crear un duplicado y solo puede arrastrar después de un segundo clic. Me gustaría poder hacer clic una vez e inmediatamente poder arrastrar.
Es importante que se arrastre el DUPLICADO, a diferencia del original, ya que el original tiene todas las funciones de clic.
create() { sprite = scene.add.sprite(0,0, "clean", "showerhead_0000"); sprite.setInteractive({ useHandCursor: true }); sprite.on('pointerdown', () => { dragTool(scene, options[idx], sprite); }); this.input.on('drag', function(pointer, gameObject, dragX, dragY) { gameObject.x = dragX; gameObject.y = dragY; }); this.input.on('dragend', function(pointer, gameObject) { gameObject.destroy(); gameState.clean_cursor = false; }); } function dragTool(scene, option, sprite){ let activePointer = scene.input.activePointer; let clone = scene.add.sprite(sprite.x,sprite.y, sprite.texture.key, sprite.frame.name); gameState.clean_cursor = clone; gameState.clean_cursor.setInteractive(); scene.input.setDraggable(gameState.clean_cursor); }Tal vez me estoy perdiendo algo, pero sería una solución simple.
esto debería funcionar igual, y no es tan complicado.
Aquí un ejemplo de trabajo:
let Example = { preload () { this.load.spritesheet('brawler', 'https://labs.phaser.io/assets/animations/brawler48x48.png', { frameWidth: 48, frameHeight: 48 }); }, create () { let buttonPos = { x:0, y:0}; let buttonPlaceholder = this.add.image(buttonPos.x, buttonPos.y, 'brawler', ).setOrigin(0, 0); let button = this.add.image(buttonPos.x, buttonPos.y, 'brawler', ).setOrigin(0, 0); this.isDragging = false; button.setInteractive({ useHandCursor: true }); this.input.setDraggable(button); this.input.on('drag', function(pointer, gameObject, dragX, dragY) { gameObject.x = dragX; gameObject.y = dragY; }); this.input.on('dragend', function(pointer, gameObject) { gameObject.x = buttonPos.x; gameObject.y = buttonPos.y; }); } } const config = { type: Phaser.AUTO, width: 400, height: 200, scene: [ Example ] }; const game = new Phaser.Game(config); <script src="https://cdn.jsdelivr.net/npm/phaser@3.55.2/dist/phaser.js"></script>...esto debería ser aún más eficaz que crear y destruir imágenes/botones...