Cocos Creator

    좌표계 (월드 스페이스와 로컬 스페이스)

    좌표계 (월드 스페이스와 로컬 스페이스)

    1. 좌표계 유니티에 월드 스페이스(World Space)와 로컬 스페이스(Local Space) 개념이 있듯이 코코스 크리에이터에도 월드 좌표계(World Coordinate)와 로컬 좌표계(Local Coordinate)가 있다. 이는 공식 레퍼런스 사이트에서의 명칭이며 실제로 API 함수들의 이름을 보면 월드 스페이스(World Space)와 노드 스페이스(Node Space)라고 부른다. (공식 레퍼런스 링크 https://docs.cocos.com/creator/manual/en/concepts/scene/coord.html) 동일한 오브젝트를 기준으로 월드 스페이스에서의 포지션을 월드 포지션, 로컬 스페이스에서의 포지션을 로컬 포지션이라고 부른다. 월드 포지션은 전체 3D 월드의 원점(0,0,..

    클릭(터치)한 지점의 좌표 구하기

    클릭(터치)한 지점의 좌표 구하기

    클릭(터치) 입력을 받으려면 그 입력을 감지할 노드(유니티로 치면 Collider)와 클릭 이벤트 리스너가 있어야 한다. 화면 어느 곳을 눌러도 클릭 이벤트가 발생되려면 노드 사이즈는 언제나 화면(Screen) 사이즈와 동일해야 한다. 이는 Widget 컴포넌트를 붙이거나 스크립트에서 처리를 해줘야 한다. onLoad(){ this.touchScreen = this.node.getChildByName("TouchScreen"); // 터치 입력을 받을 스크린 사이즈의 노드 this.centerPin = this.node.getChildByName("CenterPin"); // 터치 포인트와 비교할 또 다른 포인트 this.touchScreen.on("touchend", function(event) { t..

    일정시간 동안 숫자 증가시키는 UI

    일정시간 동안 숫자 증가시키는 UI

    보통 이러한 기능은 타겟으로 하는 라벨만 다를 뿐, 여러 클래스에서 사용할 가능성이 높다. /** * @param subject 스케쥴러를 실행할 주체 * @param start 시작 값 * @param add 시작 값에 추가할 변화 값 * @param duration 지속시간 * @param label 타겟 라벨 * @returns 스케쥴러 */ public static MoneyCounter(subject:any, start:number, add:number, duration:number, label:cc.Label){ let time = 0; // 누적 시간 let current = 0; // 누적 시간에 따른 현재 값 let counter = function() { time += cc.direct..

    실시간 시간 표시 (Timer)

    실시간 시간 표시 (Timer)

    1. 로컬 타임 update(dt:number){ let today = new Date(); let year = today.getFullYear(); let month = ('0' + (today.getMonth() + 1)).slice(-2); let day = ('0' + today.getDate()).slice(-2); let hours = ('0' + today.getHours()).slice(-2); let minutes = ('0' + today.getMinutes()).slice(-2); let seconds = ('0' + today.getSeconds()).slice(-2); this.label.string = day + '/' + month + '/' + year + '\n' + hou..

    [2.4.5 버그] cc.tween repeatForever

    [2.4.5 버그] cc.tween repeatForever

    this.infiniteRotate = cc.tween(this.wheel).delay(0.8).by(0.4, { angle : -360 }).repeatForever().start(); 0.8초의 첫 대기시간을 가진 뒤, 0.4초동안 360도 회전하는 동작을 무한히 반복하는 코드다. 크리에이터 버전 2.4.5에서 잘 작동하던 코드가 2.4.8 버전업 하고나서 문제가 생겼다. [Action update]. override me 라는 로그가 계속 찍히면서 오브젝트가 회전하지 않았다. 구글링 결과 확실히 버전과 연관이 있는 버그였다. https://forum.cocos.org/t/2-1-2-tween-repeatforever/80820 (중국어 답변을 구글 번역기로 돌림) 여러 차례 이 글을 읽어본 결과. ..

    enum 클래스 다루기

    enum 클래스 다루기

    1. enum 클래스 선언 export enum TYPE_TRASH { PAPER, VINYL, PLASTIC, CAN } enum 클래스의 선언과 정의는 C#과 거의 동일하다. enum도 클래스기 때문에 export 키워드를 붙여야 외부 클래스에서 import를 하고서 접근할 수 있다. 2. enum 클래스 사용 var temp = TYPE_TRASH.CAN; enum 클래스의 사용도 C#과 동일하다. cc.log(TYPE_TRASH[0]); // PAPER cc.log(TYPE_TRASH["PLASTIC"]); // 2 타입스크립트에서는 enum 클래스를 좀 더 폭넓게 활용할 수 있다. enum 클래스에 key값과 value값으로 접근해서 각각 value값과 key값을 얻을 수 있다. 3. enum ..

    getChildByName

    getChildByName

    1. 유니티의 Transform.Find 유니티에서 특정 오브젝트를 검색해서 찾아주는 함수는 Transform의 Find 함수가 대표적이다. 스크립트에서 간단하게 자식 노드들에 접근할 수 있고, 파라미터로 들어가는 path에 경로를 더하고 빼면서 다양하게 활용할 수 있다. 2. 코코스 크리에이터의 Node.getChildByName 유니티의 Find와 대응되는 함수가 코코스 크리에이터에는 getChildByName 이라는 함수로 존재한다. 문제는 이 함수는 노드의 자식을 한 단계밖에 검색하지 못 한다는 것이다. A 노드에서 getChildByName 함수를 통해서 B, C는 찾을 수 있지만 그 아래 D, E, F, G는 못 찾는다. 이런 큰 단점이 있지만 코코스 2.4.8 기준으로, 유니티의 Find와 ..

    cc.tween

    cc.tween

    1. 유니티 Dotween 유니티에서 범용적으로 사용되는 에셋 중에 Dotween 이라는 에셋이 있다. 거의 필수 에셋으로 취급받고 있다. (UI를 포함하는) 어떤 오브젝트에 관한 컨트롤을 스크립트로 할 때 정말 편하게 사용할 수 있는 API다. 기능도 매우 다양하다. 트윈 간의 결합이나 콜백도 간단해서, 직관적이고 읽기 편한 코드를 추구하는 사람에게는 최고의 에셋인것 같다. 2. 코코스 크리에이터 cc.tween 그리고 코코스 크리에이터 v2.0.9 버전부터 dotween을 벤치마킹한 cc.tween이 업데이트됐다. 참고할 수 있는 레퍼런스 페이지는 두 개가 있다. https://docs.cocos.com/creator/manual/en/scripting/tween.html https://docs.co..