web-dev-qa-db-fra.com

Phaser: Attacher un événement tactile sur un Sprite

Je suis nouveau sur Phaser et j'utilise actuellement Phaser v.2.0.7. Ce que je veux faire, c'est faire en sorte qu'un Sprite gère un événement tactile.

Comment puis-je attacher onTap à un objet Sprite?

Je sais que cet événement tactile serait possible avec Sprite_obj.events.onInputDown, mais j’ai quand même utilisé onInputUp non plus, car lorsqu’une popup/modale (alerte) est déclenchée après la onInputDown, vous devez cliquer deux fois pour que l’écouteur d’événements fonctionne à nouveau. (Ma solution personnelle à ce problème utilise inInputUp.)

Une autre chose que j'ai essayée est d'ajouter onTap sur mon objet de canevas, canvas.input.onTap.add, ce qui, à mon avis, ne convient pas à mon objectif. Oui, il peut maintenant gérer les événements tactiles, mais le problème est que je veux limiter l'événement tactile à l'image Sprite de la zone de dessin et non à la totalité de la zone de travail.

Est-ce que quelqu'un peut m'aider. Merci.

10
Vainglory07

Vous devez d'abord activer le Sprite pour la saisie:

Sprite.inputEnabled = true;

Vous pouvez ensuite écouter n'importe quel événement envoyé par le Sprite lorsqu'il est impliqué dans la saisie, tel que:

Sprite.events.onInputDown.add(onDown, this);

...

function onDown(Sprite, pointer) {
 // do something wonderful here
}

Le rappel reçoit 2 paramètres: le sprite et le pointeur qui ont provoqué l'événement d'entrée (comme dans un système à entrées multiples, cela peut varier souvent)

Le pointeur contient de nombreuses propriétés auxquelles vous pouvez accéder, telles que l'heure à laquelle il a été placé, l'historique des mouvements, etc. Voir la documentation Pointeur pour plus de détails.

Le Sprite a beaucoup d'événements, mais ceux-ci sont liés à l'entrée (ceci est levé directement à partir du code source de Phaser):

/**
* @property {Phaser.Signal} onInputOver - This signal is dispatched if the parent is inputEnabled and receives an over event from a Pointer.
* @default null
*/
this.onInputOver = null;

/**
* @property {Phaser.Signal} onInputOut - This signal is dispatched if the parent is inputEnabled and receives an out event from a Pointer.
* @default null
*/
this.onInputOut = null;

/**
* @property {Phaser.Signal} onInputDown - This signal is dispatched if the parent is inputEnabled and receives a down event from a Pointer.
* @default null
*/
this.onInputDown = null;

/**
* @property {Phaser.Signal} onInputUp - This signal is dispatched if the parent is inputEnabled and receives an up event from a Pointer.
* @default null
*/
this.onInputUp = null;

/**
* @property {Phaser.Signal} onDragStart - This signal is dispatched if the parent is inputEnabled and receives a drag start event from a Pointer.
* @default null
*/
this.onDragStart = null;

/**
* @property {Phaser.Signal} onDragStop - This signal is dispatched if the parent is inputEnabled and receives a drag stop event from a Pointer.
* @default null
*/
this.onDragStop = null;
24
PhotonStorm

Avez-vous essayé cela? this.input.onDown.add (obj.method, obj);

0
tomcask