2017-01-06 6 views
0

엠버 구성 요소 (나는 이것에 대한 https://github.com/Ferdev/ember-cli-pixijs 사용)에 Pixi.js에서 이벤트를 보내기 http://ipotaje.es/en/complete-html5-concentration-game-made-with-pixi-js-3/내가 예를 들어 픽시 게임은 엠버 응용 프로그램 내에서 실행하는 캔버스를

보시다시피 Pixi 구성 요소에는 게임 논리가 아닌 그림/렌더링 논리 만 포함되어 있습니다. 그것은 외부 클래스에 저장되어 있으며, log 액션을 호출하고 싶습니다. ,

import PIXI from 'pixi'; 

var PairsGame = function() {}; 
PairsGame.prototype.init = function (renderer) 
{ 
    this.renderer = renderer; 
    // create an empty container 
    this.gameContainer = new PIXI.Container(); 
    const graphics = new PIXI.Graphics(); 
    this.gameContainer.addChild(graphics); 
    // allow chain calling 
    return this; 
}; 
PairsGame.prototype.preload = function() 
{ // importing a texture atlas created with texturepacker 
    var tileAtlas = ["assets/images/images.json"]; 
    // create a new loader 
    PIXI.loader.add(tileAtlas) 
      // use callback 
      .once('complete', this.onLoaded.bind(this)) 
      //begin load 
      .load(); 
    //allow chain calling 
    return this; 
}; 
PairsGame.prototype.animate = function() 
{ 
    this.renderer.render(this.gameContainer); 
    requestAnimationFrame(this.animate.bind(this)); 
    //allow chain calling 
    return this; 
}; 

... 
ET CETERA 
I WOULD LIKE TO CALL THE log ACTION FROM THESE METHODS 
... 

지금 나는 어떤 조치를 취할 수 있도록 내 엠버 구성 요소에 각각의 차례에 '성공'또는 '실패'메시지를 보낼 싶습니다 (예 : 게임의 파일은 다음과 같이 보입니다 단순히 '성공'/ '실패'를 콘솔에 기록하십시오). 그것을 성취하는 방법은 무엇입니까?

나는 해결책 here보고 시도하고 픽시 코드
Ember.Instrumentation.instrument("pixi.gameEvent", 'success'); 

을 추가하는 듯했으나 가입자는 아무 것도받지 않을 것으로 보인다.

답변

1

PixiCanvas 구성 요소 컨텍스트는 PairsGame 초기화 메서드에 전달할 수 있으며 sendAction을 사용하여 호출 할 수 있습니다.

PairsGame.prototype.init = function (renderer, pixiCanvasComp) 
{ 
    //store component reference 
    this.pixiCanvasComp = pixiCanvasComp ; 
    this.renderer = renderer; 
    // create an empty container 
    this.gameContainer = new PIXI.Container(); 
    const graphics = new PIXI.Graphics(); 
    this.gameContainer.addChild(graphics); 
    // allow chain calling 
    return this; 
} 

사용 액션 (SendAction) log 메소드를 호출하는 당신이 PixiCanvas 구성 요소에 대한 참조를 저장할 수 있습니다 init 메소드 내부

var game = new PairsGame() 
     .init(renderer,this) 
     .preload() 
     .animate(); 
    } 

,

PairsGame.prototype.animate = function() 
{ 
    this.renderer.render(this.gameContainer); 
    requestAnimationFrame(this.animate.bind(this)); 
    //allow chain calling 
    //To call log method of PixiCanvas component, 
    this.pixiCanvasComp.sendAction('log'); 
    return this; 
} 
+0

아, 물론이 작동합니다. 나는 여전히 액션 이름을'sendAction'과 함께 보내는 명령에 매핑해야했습니다 (http://coryforsyth.com/2014/09/24/communicating-with-ember-js-components-using-sendaction/) , 그러나 이것은 바른 길에 나를 붙 잡았다. –

+0

그래도 작동하려면 구성 요소에서 경로로 'log' 액션을 이동해야했습니다. 그 이유는 확실하지 않고, 그 행동이 구성 요소에 더 적합하다고 생각하기 때문에 저를 귀찮게합니다. –

+0

이것은 현상인데, sendAction은 구성 요소 들간의 통신에 사용되고, send는 컨트롤러간에 통신을하기 위해 사용됩니다. – kumkanillam

0

pixi 구성 요소 (https://guides.emberjs.com/v2.10.0/components/triggering-changes-with-actions/)에 작업을 전달하려고합니다. 본질적으로 이것은 다음 다른 곳에서 추가 작업을 트리거하는 Pixi 구성 요소 내부에서 호출 할 수있는 콜백입니다.

+0

내 픽시 구성 요소에만 도면이 포함되어 있습니다 (위 참조)/렌더링 로직, 게임 로직이 아닙니다. 그것은 외부 클래스에 저장되어 있으며, 그로부터 액션을 호출하려고합니다. –

+0

질문을 더 자세히 업데이트했습니다. –