Cocos Creator 이벤트 모니터링 및 송신 (공식 문서 발췌)

9661 단어 cocoscreator


이벤트 모니터링 및 발사


이벤트 모니터링


이벤트 처리는 노드cc.Node에서 이루어집니다.구성 요소의 경우 액세스 노드this.node를 통해 이벤트를 등록하고 감청할 수 있습니다.감청 이벤트는 다음과 같은 방법으로 this.node.on() 함수를 통해 등록할 수 있습니다.
cc.Class({
  extends: cc.Component,

  properties: {
  },

  onLoad: function () {
    this.node.on('mousedown', function ( event ) {
      console.log('Hello!');
    });
  },  
});

특히 이벤트 감청 함수on는 세 번째 인자 target을 전송하여 응답 함수를 연결하는 호출자로 사용할 수 있다.다음과 같은 두 가지 호출 방식은 효과가 동일합니다.
//  
this.node.on('mousedown', function ( event ) {
  this.enabled = false;
}.bind(this));

//  
this.node.on('mousedown', function (event) {
  this.enabled = false;
}, this);
on 감청을 사용하는 것 외에 우리는 once 방법을 사용할 수 있다.once 감청은 감청 함수 응답 후 감청 사건을 닫는다.

감청 해제


우리가 더 이상 어떤 사건에 관심을 가지지 않을 때, 우리는 off 방법으로 대응하는 감청 사건을 닫을 수 있다.주의해야 할 것은 off 방법의 매개 변수는 on 방법의 매개 변수와 일일이 대응해야만 닫기를 완성할 수 있다는 것이다.
우리가 추천하는 쓰기 방법은 다음과 같다.
cc.Class({
  extends: cc.Component,

  _sayHello: function () {
    console.log('Hello World');
  },

  onEnable: function () {
    this.node.on('foobar', this._sayHello, this);
  },

  onDisable: function () {
    this.node.off('foobar', this._sayHello, this);
  },
});

발사 사건


우리는 두 가지 방식으로 사건을 발사할 수 있다. emitdispatchEvent.양자의 차이는 후자가 사건 전달을 할 수 있다는 데 있다.우리는 먼저 간단한 예를 통해 emit 사건을 이해한다.
cc.Class({
  extends: cc.Component,

  onLoad: function () {
    this.node.on('say-hello', function (event) {
      console.log(event.detail.msg);
    });
  },

  start: function () {
    this.node.emit('say-hello', {
      msg: 'Hello, this is Cocos Creator',
    });
  },
});

배달 사건


위에서 언급한 방법dispatchEvent은 이 방법을 통해 발사된 사건은 사건 배달 단계에 들어갈 것이다.Cocos Creator의 이벤트 전송 시스템에서 우리는 거품 전송 방식을 채택한다.거품 파견은 이벤트를 이벤트 시작 노드에서 끊임없이 그의 부급 노드에게 전달하고 루트 노드에 도착하거나 특정한 노드의 응답 함수에서 중단 처리event.stopPropagation()를 할 때까지 한다.
상기 그림에서 보듯이 우리가 노드 c에서 이벤트'foobar'를 발송할 때 노드 a, b가 모두'foobar'사건을 감청하면 이벤트는 c를 통해 차례로 b, a 노드에 전달된다.예:
//   c  
this.node.dispatchEvent( new cc.Event.EventCustom('foobar', true) );

만약 우리가 b 노드에서 이벤트를 캡처한 후에 더 이상 이벤트를 전달하지 않기를 원한다면, 우리는 event.stopPropagation() 함수를 호출해서 완성할 수 있다.구체적인 방법은 다음과 같다.
//   b  
this.node.on('foobar', function (event) {
  event.stopPropagation();
});

사용자 정의 이벤트를 보낼 때 cc.Event 대상을 직접 만들지 마십시오. 추상적인 클래스이기 때문에 cc.Event.EventCustom 대상을 만들어서 보내십시오.

이벤트 객체


이벤트 감청 콜백에서 개발자는 cc.Event 유형의 이벤트 객체event를 수신하고 stopPropagationcc.Event의 표준 API이며 기타 중요한 API는 다음과 같습니다.
API 이름
유형
의미type String
이벤트 유형 (이벤트 이름)target cc.Node
이벤트에 수신된 원본 객체currentTarget cc.Node
이벤트가 수신된 현재 대상, 이벤트가 거품 단계에서 현재 대상은 원시 대상과 다를 수 있습니다getType Funciton
이벤트 유형 가져오기stopPropagation Function
거품 단계를 멈추면 이벤트는 부모 노드에 계속 전달되지 않고 현재 노드의 나머지 감청기는 이벤트를 수신합니다stopPropagationImmediate Function
이벤트의 전달을 즉시 중지합니다. 이벤트는 부모 노드와 현재 노드의 나머지 감청기에 전달되지 않습니다.getCurrentTarget Function
현재 이벤트에 수신된 대상 노드 가져오기detail Function
사용자 정의 이벤트 정보(속함cc.Event.EventCustomsetUserData Function
사용자 정의 이벤트에 대한 정보 설정(속함cc.Event.EventCustomgetUserData Function
사용자 정의 이벤트에 대한 정보 얻기 cc.Event.EventCustom전체 API 목록은 cc.Event 및 하위 클래스의 API 문서를 참조할 수 있습니다.

시스템 내장 이벤트


이상은 일반적인 이벤트 감청 및 발사 규칙으로 코코스 크리에이터에서 cc.Node 마우스, 터치 등 시스템 이벤트를 내장하고 시스템 내장 이벤트 문서를 참고할 수 있습니다.

좋은 웹페이지 즐겨찾기