Notice
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today
Total
관리 메뉴

만재송

[Cocos Creator] Enabled 에 관한 고찰 본문

프로그래밍/COCOS Creator

[Cocos Creator] Enabled 에 관한 고찰

만재송 2018. 7. 31. 11:18

Cocos Creator 에서 Enabled 란


Cocos Creator API 레퍼런스에서 enabled 는 아래와 같이 설명되어 있다.



Boolean indicates whether this component is enabled or not.

 


해당 컴포넌트의 사용가능 여부를 Boolean 값을 통해서 나타낸다. Sprite 컴포넌트 같은 경우는 화면에 보이지 않게 할 수 있고, Collider 컴포넌트 같은 경우는 충돌을 무시 할 수도 있다. 그중 가장좋은 기능으로는 생명주기중 update 콜백함수의 호출을 중단해주는 순기능을 가지고 있다. 모든 컴포넌트는 생명주기 콜백함수를 가지고 있는데 이것이 무엇인지 먼저 확인해보고 enabled 사용방법에 대해 알아보자.



생명주기


Cocos Creator 의 모든 컴포넌트는 7개의 생명주기 콜백함수를 가지고있다.


  • onLoad: 해당 노드가 활성화 될 때 최초1번 실행되는 함수이다.
  • start: 노드트리에 있는 모든 노드들이 활성화 되고 실행되는 함수이다. 
  • update: 매 프레임마다 호출되는 함수이다.
  • lateUpdate: 매 프레임마다 update 다음으로 호출되는 함수이다.
  • onEnable: 해당 노드가 활성화 될 때 실행되는 함수이다.
  • onDisable: 해당 노드가 비활성화 될 때 실행되는 함수이다.
  • onDestroy: 해당 노드가 삭제될 때 실행되는 함수이다.

Enabled의 순기능

앞서 말한대로 enabled 는 update의 호출을 막아준다. 생명주기에서 update 는 매프레임마다 호출을 하기 때문에 필요가 없을때도 있다. 그럴 때 굳이 플래그 변수를 통해서 검사 할 필요없이 enabled 로 update 를 중단시킬 수 있다. 확인을 위해 프로젝트를 생성하고 아래와 같이 코드를 작성하자.

cc.Class({
extends: cc.Component,

properties: {
},

onLoad: function () {
this.enabled = false;
},

update: function () {
console.log("update");
},

lateUpdate: function () {
console.log("lateUpdate");
}
});


작성하고 아무 노드에 추가한 후 실행하면 콘솔창에 어떤 값도 찍히지 않는다. update 가 호출이 안되고 있는것이다. 


잘못쓰면 독이된다

enabled 는 이렇게 좋은 기능이 있는 반면, 엉뚱한 함수까지 중단해서 사람을 혼란에 빠지게 할 수도 있다. 예시를 통해 한번 알아보자. 버튼을 누르면 Sprite 노드를 삭제하는 코드를 작성해보자. 먼저 화면에 Sprite 노드와 button 을 추가하자.


다음으로 코드를 작성하자.


cc.Class({
extends: cc.Component,

properties: {
},

onLoad: function () {
this.enabled = false;
},

start: function () {
console.log("start");
},

onEnable: function () {
console.log("onEnable");
},

update: function () {
console.log("update");
},

lateUpdate: function () {
console.log("lateUpdate");
},

onDisable: function () {
console.log("onDisable");
},

onDestroy: function () {
console.log("onDestroy");
},

onClickedButton: function () {
this.node.destroy();
}
});


이 예제의 확인 요소는 과연 어디까지 생명주기 콜백함수를 호출중단 하는가이다. 해당 코드를 Sprite 노드에 추가하고 코드를 실행해보자.

소름이다... start 는 물론, onEnable, update, lateUpdate 모두 실행이 안되는 모습이다. update 만 끄고 싶은데 필요한 start 와 onEnable 까지 실행이 되지않는다. 그럼 onDisable 과 onDestroy 도 실행이 안될까? 버튼을 클릭하여 Sprite 노드를 삭제시켜보자.

onDisable 은 호출이 되지 않지만, onDestroy 는 호출된다. 즉, onDestroy 빼고는 전부 호출이 되지 않는다. 이렇듯 enabled 를 사용할때는 생명주기를 잘생각하고 사용하기를 바란다.

Comments