2014-12-25 1 views
4

여기에 JSFiddle입니다.Phaser JS 이벤트를 중지하는 방법 textButton.events.onInputDown 이벤트에서 game.input.onDown 이벤트로 전파 (실행) 하시겠습니까?

두 가지 이벤트가 있습니다.

  1. 일부 로직 (내 예 입자 생성) textButton 다른 논리 않는하는 Phaser.Text 객체 인스턴스이다
  2. textButton.events.onInputDown인가하지 game.input.onDown이다.

문제는 : 나는 두 이벤트가 12을 해고 내 textButton 클릭 할 때.

문제는 어떻게이 textButton를 클릭하면 발사에서 이벤트 1을 방지하기 위해인가? 코드의

부 :

... 
//This event is fired on click anywhere event # 1 
game.input.onDown.add(particleBurst, this); 

//This is Clickable text 
textButton = game.add.text(game.world.width - 5, 5, "CLICK ME", fontStyle); 
textButton.anchor.setTo(1, 0); 
textButton.inputEnabled = true; 

//This event is fired on click on text event # 2 
textButton.events.onInputDown.add(function() { 
    console.log("button is Clicked"); 
}, this, 2); 
... 

답변

5

당신은 배경을 추가 할 수 있습니다 - 투명 스프라이트를 - 그리고 input.priorityID을 사용합니다.

우선 순위 ID는 입력 이벤트가 발생할 때 을 얻는 게임 개체를 결정하는 데 사용됩니다. 예를 들어 중복되는 여러 개의 스프라이트가있는 경우, 기본적으로 디스플레이 목록 상단에있는 스프라이트가 입력 이벤트에 우선 순위를 부여받습니다. priorityID 값을 제어하여 에서이 문제를 막을 수 있습니다. 값이 클수록 이 중요 할수록 입력 이벤트로 간주됩니다.

참조 :

textButton.input.priorityID = 1; // higher pirority 

는 입자 함수에 첫 번째 매개 변수로 (우리의 배경)을 클릭 스프라이트를 추가합니다 :

http://docs.phaser.io/InputHandler.js.html#sunlight-1-line-45

// This is event #1 added to background sprite 
var bg = game.add.sprite(0, 0); 
bg.fixedToCamera = true; 
bg.scale.setTo(game.width, game.height); 
bg.inputEnabled = true; 
bg.input.priorityID = 0; // lower priority 
bg.events.onInputDown.add(particleBurst); 

것은 당신의 textButton가 더 높은 우선 순위를 가지고 있는지 확인하십시오

function particleBurst(bg, pointer) { 

이렇게하면 하나의 이벤트가 트리거되어야합니다.

수정 된 바이올린을 확인하십시오. http://jsfiddle.net/g05bbL6g/3/

+0

감사합니다. @lpiepiora. 이것은 확실히 좋은 해결 방법으로 IMHO 작동합니다. 그러나 글로벌 게임 입력을위한 솔루션이 있는지 궁금합니다. 나는 내 자신의 우선 순위를 시도했지만 그 경우에는 작동하지 않습니다. –

+0

@AlexanderArutinyants 나는 기꺼이 그것을 직접 알게되면 나는 더 좋은 길을 모른다.) – lpiepiora

관련 문제