json 형태의 데이터만 사용을 하기에 문제가 없었는데, 파일다운로드, http-proxy-middleware르 사용하는 요건이 생기자마자 작업을 했는데 오류가 발생하였다.

-- main.ts
useGlobalMiddleware(new TransformInterceptor());

위와 같이 트렌스폼을 전역으로 사용할 경우에 리턴값이 존재할 경우와 하지 않을 경우를 생각해야한다.

 

controller 에서 리턴값이 존재하냐 마냐 따라서 다르게 되는데, 위와 같은 상황에 리턴값이 존재할 경우에는 controller 에서 res.send등이 오류가 발생하게 된다.

 

아래와 같이 값의 유무에 따라 처리 로직을 다르게하면 res.send, http-proxy-middleware 이 중간에 res를 처리하는 상황에서도 오류가 발생하지 않는다.

-- transaction.intercepter.ts

import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

export interface Response<T> {
  data: T;
}

@Injectable()
export class TransformInterceptor<T> implements NestInterceptor<T, Response<T>> {
  intercept(context: ExecutionContext, next: CallHandler): Observable<Response<T>> {
    return next.handle().pipe(map( (data)=> {
      if (!data) {
        return data;
      }

      // to do somthing
    }));
  }
}

 

 

 

 

 

필요한 전역 모듈

$ npm i -g @nestjs/cli tree-cli pnpm

file, class 등 naming 규칙

  • 파일명은 케밥 케이스를 사용합니다.
  • 클레스명은 대문자를 사용합니다.
  • interface, controller 등은 예) "xxx.interface.ts", "xxx.controller.ts" 로 명명합니다.
  • nest g xxx 를 통하여 생성하고 파일을 구조에 맞게 이동합니다.

API 작성시 controller, module, service의 path 관리 규칙

  • controller 의 명에따라 폴더 구조로 나눕니다.
  • monorepo를 지원하기 때문에 공통 모듈일 경우는 lib로 생성하여 사용합니다.
  • dto는 git의 sub_module을 통해 배포해야 클라이언트 또는 브라우저에서 같이 사용가능합니다.

자바스크립트로 DOM 게임을 제작하게 되었다. 


실제적으로 Javascript로 게임을 만들때 저 함수가 호출(중요?) 시키는 경우가 많다.


하지만 개발을 하다보니 특수한 문제가 발생되었다. 저 함수가 호출이 안되는 경우이다.


그 상황을 남긴다.


  • 모바일 환경에서 최신버전이 아닌 특정 하위 버전을 갖고 있다.
  • 여러탭이 있을경우 다른 탭을 보고 있다.
  • 브라우저를 최소화 했다.
  • 기타 상황.


이런 상황들이 존재 하였다.


아래는 상기 문제를을 해결하기 위해 처리했던 방법들이다.

  1. requestAnimationFrame 라는 함수를 없을때 만든다.
  2. setInterval로 60프레임에 맞춰 호출

A방식의 문제점은 2,3번의 경우에 호출이 되지 않는다.

B방식의 문제점은 2,3번의 경우 호출이 되나 1초에 1번씩 호출이 되더라. 그래서 프레임 스킵방식으로 처리해야 했다.


Traceback (most recent call last): File "/Applications/Development/Cocos2d-x/cocos2d-x-3.9/tools/cocos2d-console/bin/cocos.py", line 22, in <module> import cocos_project File "/Applications/Development/Cocos2d-x/cocos2d-x-3.9/tools/cocos2d-console/bin/cocos_project.py", line 4, in <module> import cocos File "/Applications/Development/Cocos2d-x/cocos2d-x-3.9/tools/cocos2d-console/bin/cocos.py", line 874, in <module> language, encoding = locale.getlocale() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 562, in getlocale return _parse_localename(localename) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 475, in _parse_localename raise ValueError, 'unknown locale: %s' % localename 

ValueError: unknown locale: UTF-8

cocos 실행시 

언어 문제의 에러가 발생하는 경우가 생겼다 구글링 해보니 랭귀지 설정이 안되어 있다고 한다.

(참고)


$> sudo pico ~/.profile

다음 내용을 입력후
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 


$> source ~/.bash_profile


적용 하면 바로 해결된다.

좌표계

cocos2d-x는 OpenGL을 사용함으로 인해 좌측 상당이 (0,0) 이 아니고,

왼쪽 하단이 (0,0) 이고 왼쪽 상단이 (0, windSize()); 이다.

Size winSize = Director::getInstance()->getWinSize();


앵커포인트

범위 : (0.0, 0.0) ~ (1.0, 1.0);

좌표계와 마찬가로 왼쪽하단이 (0.0, 0.0), 왼쪽상단이 (0.0, 1.0), 세로중간 가로 중간(0.5, 0.5)

기본구조

Node: 최상위 클레스, cocos2d-x의 모든 클레스가 이 녀석을 상속

Director: 싱글톤 클레스(1개만 존재한다), 장면을 관리한다.

Scene: 콘테이너. 이벤트 처리 불가.

Layer: 콘테이너. 이벤트 처리 가능.

Sprite: 이미지, 에니메이션 처리. 파일로딩, 화면출력 등등

Action: 애니메이션 처리를 한다. 이동, 회전, 점프, 크기변환, 구간반복 등등. reserv 함수 제공으로 거꾸로 동작할 수도 있음.

Qooxdoo 로 클레스 만들기.


// 클레스 - 기본상속 (qx.core.Object)

qx.Class.define("projectName.path.fileName" {

statics:{},

construct:function() { /* 생성자 */ this.base(arguments); },

events:{},

properties:{},

members:{},

destruct:function() { /*파괴자*/ }

});


// qx.core.Object 상속

qx.Class.define("projectName.path.fileName" {

extend:qx.core.Object,

statics:{},

construct:function() { /* 생성자 */ this.base(arguments); },

events:{},

properties:{},

members:{},

destruct:function() { /*파괴자*/ }

});


// 싱글톤

qx.Class.define("projectName.path.fileName" {

type:"Singleton",

statics:{},

construct:function() { /* 생성자 */ this.base(arguments); },

events:{},

properties:{},

members:{},

destruct:function() { /*파괴자*/ }

});


// 싱글톤

qx.Class.define("projectName.path.fileName" {

type:"Singleton",

statics:{},

construct:function() { /* 생성자 */ this.base(arguments); },

events:{},

properties:{},

members:{},

destruct:function() { /*파괴자*/ }

});

한글이 출력되지 않는 경우가 여러가지 있지만,


이 글에 해당하는 내용은 기본적으로 한글 폰트가 내장이 안되어 있을 경우 이다.


한글 폰트를 "ProjectPath/resource/font" 를 넣으면 해결된다.


무료 폰트인 나눔고딕 코딩 폰트를 넣자. 



auto label = Label::createWithTTF("슬픈윈드", "fonts/NanumGothicCoding.ttf", 48);

label->setPosition(Point(480,320));

this->addChild(label, 1);


이제 잘 보일 것이다.

'Dev > cocos2d-x' 카테고리의 다른 글

cocos 실행시 에러 language 문제  (0) 2016.07.18
cocos2d-x 좌표계, 앵커포인트  (0) 2015.04.01
cocos2d-x 구조  (0) 2015.04.01
cocos2d-x 기본 설정 및 프로젝트 생성하기 for mac  (0) 2015.03.31

개발 환경 :

Yosemite 10.10.2

Cocos2d-x v3.5


다운로드 및 환경설정

1. cocos2d-x 를 다운받는다.

2. 압축을 적당한 곳에 푼다.

3. terminal "cd path/cocos2d-x/" 이동

4. terminal "python setup.py" 진행후

5. terminal "source ~/.bash_profile"

6. terminal "cocos" 아래 내용처럼 보이는지 확인.

/cocos2d-x/tools/cocos2d-console/bin/cocos.py 1.5 - cocos console: A command line tool for cocos2d-x


Available commands:

run           Compiles & deploy project and then runs it on the target

luacompile    minifies and/or compiles lua files

deploy        Deploy a project to the target

package       Manage package for cocos

compile       Compiles the current project to binary

framework     Manage frameworks for the project

new           Creates a new project

jscompile     minifies and/or compiles js files


Available arguments:

-h, --help Show this help information

-v, --version Show the version of this command tool


Example:

/Users/wind/Documents/cocos2d-x/tools/cocos2d-console/bin/cocos.py new --help

/Users/wind/Documents/cocos2d-x/tools/cocos2d-console/bin/cocos.py run --help


프로젝트 생성

1.

Game Name : TestGame,

Package Name: info.addline.testgame

Project Path: ./project

Language : cpp


을 생성한다고 할때


2. terminal "cocos new TestGame -p info.addline.testgame -l cpp -d ./project"

3. "path/cocos2d-x/project/TestGame" 에 생성된다.



'Dev > cocos2d-x' 카테고리의 다른 글

cocos 실행시 에러 language 문제  (0) 2016.07.18
cocos2d-x 좌표계, 앵커포인트  (0) 2015.04.01
cocos2d-x 구조  (0) 2015.04.01
cocos2d-x 한글이 출력 안될 경우.  (0) 2015.04.01

랩핑한지 오래 되었지만 제가 직접 하나하나 랩핑하였습니다.


https://github.com/windofwind/pureMVC-for-Qooxdoo/


qooxdoo 에 pureMVC 적용하고 싶으신 분들은 프로젝트 라이브러리에 추가하세요.

+ Recent posts