2014-09-01 15 views
10

Jestem nowy na fazer i teraz używam phaser v.2.0.7. Chcę tylko sprawić, by duszek obsługiwał wydarzenie dotykowe.Phaser: Dołącz wydarzenie dotykowe na Sprite

Jak mogę dołączyć onTap do obiektu ikonki?

wiem, że zdarzenie dotykowy byłoby możliwe sprite_obj.events.onInputDown, ale użyłem onInputUp albo dlatego, gdy istnieje popup/modalna (alert) zwolniony po onInputDown, trzeba kliknąć dwa razy po to, aby uczynić pracę detektora zdarzeń jeszcze raz. (My personal workaround for this issue is using inInputUp.)

Inna sprawa, że ​​starałem się, aby dodać onTap na mojego obiektu płótnie, canvas.input.onTap.add co moim zdaniem nie pasuje osiągnąć mój cel. Tak, może teraz obsługiwać zdarzenia dotykowe, ale problemem jest ograniczenie zdarzenia dotykowego tylko do obrazu sprite na płótnie, a nie do całego płótna.

Czy ktoś może mi pomóc. Dzięki.

Odpowiedz

24

Najpierw należy włączyć Sprite dla wejścia:

sprite.inputEnabled = true;

Można wtedy posłuchać któregokolwiek ze zdarzeń Sprite wysyłek, kiedy jest zaangażowany w wejściu, takie jak:

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

... 

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

Połączenie zwrotne jest wysyłane 2 parametry: Sprite i wskaźnik, który spowodował zdarzenie wejściowe (jak w systemie z wieloma wejściami to może się często zmieniać)

Wskaźnik ma wiele właściwości, do których możesz uzyskać dostęp, takich jak czas, w którym został opuszczony, historia ruchów itp. Szczegóły znajdziesz w Pointer docs.

Sprite ma wiele imprez, ale są to te związane wejściowe (to jest podnoszony bezpośrednio z kodu źródłowego 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; 
+0

dzięki stary. ale nie mogę użyć onInputDown :(dlaczego? ponieważ ma problem z wyskakującymi okienkami jak alert() i modem bootstrap opisanym w numerze tutaj: http://www.html5gamedevs.com/topic/4355-click-on-an-image- not-working/ – Vainglory07

+0

Naprawdę nie rozumiem znaczenia problemu w tym adresie URL do tego, co powiedziałeś, że próbujesz zrobić. onInputDown nie jest zdarzeniem DOM, jest Signal. Jeśli potrzebujesz uchwycić zdarzenia DOM potrzebujesz aby uchwycić je na elementach DOM, nie można ich sfałszować: – PhotonStorm

+0

Scenariusz wygląda tak, jak po kliknięciu obrazu sprite na płótnie i coś jest nie tak, pokażę błąd jako modal i to jest kwestia, w której problem onInputDown więc nie przechwytywanie zdarzenia dom.to jest po prostu na wydarzenie wejściowe phaser, na którym polegam .. przepraszam za zły angielski sir dzięki – Vainglory07

0

Czy próbowałeś tego? this.input.onDown.add (obj.method, obj);