2014년 5월 23일 금요일

이클립스 속도 향상 (eclipse.ini 수정)

이클립스 속도 향상 (eclipse.ini 수정)

eclipse.ini 수정

1) Before
-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.1.R36x_v20100810
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m


2) After
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xverify:none
-XX:+UseParallelGC
-XX:-UseConcMarkSweepGC
-XX:PermSize=128M
-XX:MaxPermSize=128M
-XX:MaxNewSize=128M
-XX:NewSize=128M
-Xms512m
-Xmx512m



3) 설명
-Dosgi.requiredJavaVersion=1.6 => JDK 1.6 이상을 설치했을 경우에 1.6으로 설정하면 속도가 빨라진다.

-Xverify:none => 클래스의 유효성을 검사 생략. (eclipse 실행 시작 시간 단축)
-XX:+UseParallelGC => Parallel Collector를 사용. 병렬 가비지 컬렉션 사용. (병렬 처리로 속도 향상)
-XX:+AggressiveOpts => 컴파일러의 소수점 최적화 기능을 작동시켜 빨라진다.
-XX:-UseConcMarkSweepGC => 병행 mark-sweepGC 기능을 수행하여 이클립스 GUI의 응답을 빠르게한다.
-XX:+CMSIncrementalMode=true => 점진적인 GC

-XX:PermSize=128M    => eclipse 클래스 로딩 기본 메모리
                       Permanent Generation(영구 영역) 크기(Out Of Memory 에러시 크기 조절)
-XX:MaxPermSize=128M  => eclipse 클래스 로딩 최대 메모리
-XX:NewSize=128M         => New Generation(새 영역) 크기
-XX:MaxNewSize=128M   => New Generation(새 영역) 의 최대 크기

-Xms512m : eclipse 실행시 잡는 최소 Heap 메모리
-Xmx512m : eclipse 실행시 잡는 최대 Heap 메모리
                   최소와 최대를 같은 값으로 설정하면 오르락 내리락 하지않아 빨라진다.

[PC메모리에 따른 메모리 정의 예]
1 기가 이하 PC  => -Xms256m -Xmx256m
2 기가 ~ 3 기가 PC  => -Xms512m -Xmx512m
4기가 이상 PC   => -Xms1024m -Xmx1024m

[ 참고 ]
JVM 은 3가지 메모리 영역을 관리합니다.
 1. Permanent(영구) 영역 : JVM 클래스와 메소드를 위한 공간. = PermSize 설정
 2. New/Young 영역 : 새로 생성된 개체들을 위한 공간. = NewSize 설정
 3. Old 영역 : 만들어진지 오래된 객체들의 공간.(New 영역에서 이동해 온다)

2014년 3월 14일 금요일

[Cocos2d-x 3.0] Sprite

※ Sprite 
Sprite *spr = Sprite::create("Icon.png");
spr->setAnchorPoint(Point::ZERO);
spr->setPosition(Point(100, 100));
this->addChild(spr);

create() : 객체를 생성하는 메소드
setAnchorPoint() : 앵커포인트를 설정하는 메소드
setPosition() : 위치를 설정하는 메소드
addChild() : 객체를 화면에 출력하는 메소드


ㄱ. create()
Sprite를 생성하는 방법은 크게 3가지로 구분할 수 있는데, 위와 같이 파일명을 입력해서 만드는 방법과 SpriteFrame을 이용해서 만드는 방법, 마지막으로 텍스쳐를 가지고 만드는 방법이 있다.
단순하게 파일을 가지고 만드는 방법은 위와 같이 바로 파일명을 입력하는 방법이 있고, 아래 소스 코드처럼 파일명과 영역을 지정해서 이미지 파일에서 지정된 위치만 Sprite로 만드는 방법이 있다.

Sprite *spr = Sprite::create("Icon.png", Rect(0, 0, 100, 100));

또한, 일반적으로 코코스2d-x에서 사용되는 대부분의 객체는 create() 메소드를 통해서 생성을 하며, 이것을 통해서 생성된 메소드는 따로 메모리 관리를 하지 않아도 된다.


ㄴ. addChild()
addChild()은 단순하게 화면에 출력해주는 메소드가 아니라 위에 소스 코드에서는 spr이라는 Sprite 객체를 this인 화면 레이어에 종속시키는 역할도 하는 메소드이다. 이러한 관계를 부모-자식(Parent-Child)관계라고 하고 자식은 부모에게 종속된다. 예를 들어 부모가 화면에서 안보여지게 되면 자식도 함께 보여지지 않으며, 부모의 좌표가 이동하게 되면, 따로 자식의 좌표를 이동시키지 않아도 부모에 종속된 모든 자식들도 이동하게 된다.

addChild()를 할 때 위와 같이 단순하게 객체를 입력하는 것외에 z-Order와 Tag라는 것을 추가로 입력할 수 있다. z-Order는 z축의 값을 말하는 것이며, 이 값이 클수록 위쪽에 위치하게 된다. 즉, 같은 위치에 이미지 같은 것이 겹쳐질때 z축의 값이 큰 것이 위에 놓이게 된다. 따로 z축의 값을 설정하지 않을때에는 addChild()를 나중에 한 객체가 위에 놓여지게 된다.

this->addChild(spr, 1);
this->addChild(spr, 2);
[ x, y, z 축 ]

Tag는 부모에 종속되어 있는 자식들에게 번호를 매기는 것으로 이렇게 매긴 번호로 아래와 같이 자식의 객체를 다시 리턴 받을 수도 있다.

this->addChild(spr, 1, TAG_1);
Sprite *pSpr_1 = (Sprite *)this->getChildByTag(TAG_1);

ㄷ. 기타 메소드들
setScale() : 확대, 축소하는 메소드
- setScale(0.5) : 0.5배 축소
- setScale(2.0) : 2배 확대
- setScaleX(0.5) : 너비만 0.5배 축소
- setScaleY(2.0) : 높이만 2배 확대

setRotation() : 회전하는 메소드, (0~360)
- setRotation(90) : 시계방향으로 90도 회전하기
- setRotation(-45) : 반시계방향으로 45도 회전하기
- setRotationX(45) : X 좌표축을 기준으로 45도 회전하기
- setRotationY(45) : Y 좌표축을 기준으로 45도 회전하기

setOpacity() : 알파값을 설정하는 메소드, (0~255)
- setOpacity(128) : 반투명상태 만들기
- setOpacity(0) : 투명상태 만들기
- setOpacity(255) : 불투명상태 만들기

setVisible() : 화면에 출력여부를 정하는 메소드
- setVisible(true) : 화면에 보임
- setVisible(false) : 화면에 안보임

setFlipX(), setFlipY() : 반전하기
- setFlipX(true) : x축을 기준으로 반전하기
- setFlipY(true) : y축을 기준으로 반전하기


※ Point, Size, Rect 관련
Point() : x좌표, y좌표 값을 가지는 자료구조형
- Point(100, 100) : (100, 100)의 좌표값
- point pos = Point(50, 50);
- Point::ZERO => Point(0, 0)
- pos.x, pos.y

Size() : 너비(width)와 높이(height)를 가지는 자료구조형
- Size(100, 100) : 너비 100과 높이 100의 사이즈값
- Size size = Size(50, 50);
- size.width, size.height;

Rect() : 역영의 값(위치와 사이즈)을 가지는 자료구조형
- Rect(0, 0, 100 ,100) : (0, 0) 좌표의 사이즈 (100, 100)를 나타내는 값
- Rect rect = Rect(0, 0, 100, 100);
- rect.origin.x, rect.origin.y, rect.size.width, rect.size.height;




[cocos2d-x 3.0] 사운드(Sound) 관련

cocos2d-x에서는 CocosDenshion이라는 사운드라이브러리를 사용한다.

그래서 네임스페이스를 매번 입력하지 않으려면 상단에 using namespace CocosDenshion;이라고 선언해야 합니다.

사운드는 크게 배경음악효과음악으로 구분한다.

1. 재생 관련(Play)
void playBackgroundMusic(const char *pszFilePath, bool bLoop)
파일명과 반복여부를 입력하면 된다. 배경음악의 경우, 한번에 1개의 배경음악만 플레이된다. 즉, 동시의 2개 이상의 배경음악을 플레이 할 수는 없다.
SimpleAudioEngine::getInstance()->playBackgroundMusic("music.wav", false);

unsigned int playEffect(const char *pszFilePath, bool bLoop)
위와 동일하다. 다만, 효과음의 경우는 동시에 여러개의 플레이가 가능하다. 플레이하면 지정된 효과음의 고유번호가 리턴된다.
SimpleAudioEngine::getInstance()->playEffect("effect.wav", false);



2. 정지 관련(Stop)
stopBackgroundMusic()
stopBackgroundMusic(bool bReleaseData)
배경음악을 정지한다. 또한 종료할때 로딩된 배경음악을 완전히 해제할지를 지정할수 있다.
SimpleAudioEngine::getInstance()->stopBackgroundMusic();

stopEffect(unsigned int nSoundId)
효과음의 번호를 지정해서 해당 효과음만 정지한다.
SimpleAudioEngine::getInstance()->stopEffect(soundID);

stopAllEffects()
현재 플레이되고 있는 모든 효과음을 정지한다.
SimpleAudioEngine::getInstance()->stopAllEffects();



3. 일시 정지, 재시작(Pause, Resume)
pauseBackgroundMusic()
현재 플레이되고 있는 배경음악을 일시정지한다.
SimpleAudioEngine::getInstance()->pauseBackgroundMusic()

resumeBackgroundMusic()
일시정지한 배경음악을 정지된 위치부터 다시 플레이한다.
SimpleAudioEngine:: getInstance()->resumeBackgroundMusic()

pauseEffect(unsigned int nSoundId)
해당되는 효과음의 플레이를 일시정지한다.
SimpleAudioEngine:: getInstance()->pauseEffect(unsigned int nSoundId)

resumeEffect(unsigned int nSoundId)
일시정지된 해당음을 정지된 위치부터 다시 플레이한다.
SimpleAudioEngine:: getInstance()->resumeEffect(unsigned int nSoundId)

pauseAllEffects()
현재 플레이되고 있는 모든 효과음의 플레이를 일시정지한다.
SimpleAudioEngine:: getInstance()->pauseAllEffects()

resumeAllEffects()
일시정지한 모든 효과음을 정지된 위치부터 다시 플레이한다.
SimpleAudioEngine::sharedEngine()->resumeAllEffects()




4. 볼륨(Volume)
setBackgroundMusicVolume(float volume)
배경음악의 볼률을 지정한다. 범위는 0.0 ~ 1.0이다.
SimpleAudioEngine:: getInstance()->setBackgroundMusicVolume(float volume)

setEffectsVolume(float volume)
효과음의 볼륨을 지정한다.
SimpleAudioEngine:: getInstance()->setEffectsVolume(float volume)

getBackgroundMusicVolume()
배경음악의 볼륨 값을 가져온다.
float SimpleAudioEngine:: getInstance()->getBackgroundMusicVolume()

getEffectsVolume()
효과음의 볼륨의 값을 가져온다.
float SimpleAudioEngine:: getInstance()->getEffectsVolume()




5. 로딩(preLoad)
preloadBackgroundMusic(const char *pszFilePath)
배경음악을 미리 로딩해둔다.
SimpleAudioEngine:: getInstance()->preloadBackgroundMusic(const char *pszFilePath)

preloadEffect(const char *pszFilePath)
효과음을 미리 로딩해둔다.
SimpleAudioEngine:: getInstance()->preloadEffect(const char *pszFilePath)




6. 재생여부확인
isBackgroundMusicPlaying()
배경음악의 플레이 여부를 리턴한다.
bool SimpleAudioEngine:: getInstance()->isBackgroundMusicPlaying()










2014년 3월 7일 금요일

Cocos2d-x 기본 개념 잡기


Cocos2d를 사용하기 위해 익숙해져야 하는 용어들과 그 역할을 알아 봐야 할거 같다.
아래 내용은 Cocos2d을 구글 아저씨 한테 물어 여기저기에서 인용한 것들이다.

※ 참고 사이트
Cocos2d : http://www.cocos2d-x.org/wiki/Director_Scene_Layer_and_Sprite
평범한 후라이의 블로그 : http://blog.daum.net/synsy/7664323
마루티님의 블로그 : http://blog.naver.com/yhjeong89
Descode.net : http://descode.net/index.php/archives/105
:
:

CCDirector - 싱글톤 객체. 프로그램이 실행되는 동안 단 하나의 객체만 생성된다. 이 CCDirector가 어떤 Scene을 화면에 띄우기로 결정하는지에 따라서 화면에 보이는 그림이 달라진다. 단순히 화면을 띄우는 것 외에도 앱을 일시정지(Pause) 시키거나 다시 재개(Resume)하는 등 다양한 역할을 하지만 일단 화면을 띄우는데 주 역할을 한다고만 알아놓아도 될거 같다.(Scene 을 관리하며, 전환처리 등을 담당)
포함관계로는 가장 최상위 클래스라고 할 수 있고 오로지 CCScene클래스만 포함될 수 있다.

CCScene - 그림을 그릴 때 사용하는 종이라고 생각하면 된다.(장면을 만들때 사용하는 클래스). 종이가 있어야 그 위에 그림을 그릴 수 있듯이 CCScene 객체가 있어야 화면에 그림을 표시할 수 있다. 하나의 CCScene은 여러개의 CCLayer를 참조할 수 있다. (아래 그림에서는 하나의 CCLayer만 참조하고 있지만 실제로는 다수의 CCLayer를 참조할 수 있다.)
게임상 한 동작을 완결시키는 전체적인 화면을 이야기 한다. Android로 치자면 Activity 같은거라고 보면 됨.
게임에는 MenuScene, GameScene, OptionScene, RankScene 등을 만들어서 관리하는 것이 대부분인데, 이를 쉽게 구현할 수 있도록 클래스 지원한다. CCLayer, CCNode, CCSprite, CCMenu 등의 객체를 포함할 수 있고, 장면을 그릴 때에 여러 클래스셋에 대한 컨테이너 역할을 한다.

예를 들어, 다음과 같은 장면 게임을 가질 수있다
소개, 메뉴, 레벨 1, Cutscene 1, 레벨 2, 승리 Cutscene, Losing Cutscene, Highscore 화면
[ game follows ]


CCLayer - 코딩을 하면서 대부분의 작업 시간을 할애하게 될 부분이다. 이 CCLayer 객체에 그림도 넣고 각종 메서드도 집어넣으면서 기능을 구현하게 된다. CCLayer는 CCNode 객체를 참조할 수 있다.
Android로 치면  Layout 같은 거. Activity가 Layout을 불러서 화면을 보여주고
Layout을 교체해서 다른 화면을 보여주기도 하고 그런거!!
기본적으로 CCScene와 비슷하게 컨테이너 역할을 수행하지만, 가장 다른 점은 사용자의 입력을 처리할 수 있는 인터페이스를 제공한다. 터치나 센서 반응 등에 대한 처리를 할 수 있으며, 하나의 Scene에는 하나 이상의 CCLayer로 구성됨.
[ CCLayer 예 ]



CCNode - 일반적으로 화면에 보이는 그림과 같은 객체들을 대부분 CCNode하고 한다.  통상적으로 Node라고 칭한다. CCScene, CCLayer, CCSprite등은 모두 CCNode를 상속받고 있으므로 이들을 Node라고 할 수 있다. 위에서 '참조한다' 라는 표현을 사용했지만 '붙는다' 라고 이해하시는게 빠르겠다. CCLayer에 계속해서 Node를 붙여나감으로서 Layer를 완성해 나가는 것.

CCSprite - CCNode를 상속하는 대표적인 객체. '그림'이라고 생각하시면 될거 같다.(화면 구성요소) Cocos2D에서 사용하는 모든 그림들은 CCSprite의 객체를 통해서 화면에 출력할 수 있다.(Image의 표현, Animation이나 Action등을 처리)
Android로 치자면 Button 이니 TextView니 하는것들에 해당!! 게임에서 등장하는 이미지들이 대부분 CCSprite 이다.

CCLayer에 CCSprite들을 넣어서 화면을 만들고, 이 CCLayout을 CCScene에 담아서 보여주는거라고 이해하면 대충 OK.




2014년 3월 6일 목요일

Cocos2d-x Eclipse에서 C++ 환경설정


1. Eclipse CDT Plugin 설치
Eclipse CDT(C/C++ Development Tooling)는 이클립스 상에서 C, C++ 빌드 환경을 제공하여, C, C++로 만든 소스를 쉽게 빌드하여 사용할 수 있게 프로젝트를 만들거나 C, C++ 소스를 추가할 수도 있다.

2. Convert to a C/C++ Project
ㄱ. 우클릭 > New > Other 선택
ㄴ. C/C++ > Convert to a C/C++ Project(Adds C/C++ Nature) 선택
ㄷ. 프로젝트 선택하고 Project Type을 Makefile project 로 선택 하고 Finish
우클릭 > New > Other 선택 ]

[ C/C++ > Convert to a C/C++ Project(Adds C/C++ Nature) 선택 ]

프로젝트 선택하고 Project Type을 Makefile project 로 선택 ]


3. Source Location 설정
ㄱ. 프로젝트의 Classes 아래 소스 링크 추가
Project 우클릭 > Properties > C/C++ General > Paths and Symbols > Source Location 탭 선택
> Link Folder... 클릭 > Link to folder in the file system 체크 > Browse... 선택 > 프로젝트 Root경로 밑의 Classes 폴더 선택 
Tip > Folder name이 Classess 가 있다고 나오면 폴더명을 수정해 준다.(아래 그림 Classess_CPP 로 지정)

Source Location 설정 ]

[C++ 소스 확인]
ㄷ. Cocos2d-x 소스 링크 추가
Project 우클릭 > Properties > C/C++ General > Paths and Symbols > Source Location 탭 선택
> Link Folder... 클릭 > Link to folder in the file system 체크 > Browse... 선택 > Cocos2d-x의 Root  폴더 아래 cocos 폴더 선택 



Cocos2d-x 소스 링크 추가 ]

4. C++  환경 설정
ㄱ. Code Analysis 설정
 Project 우클릭 > Properties > C/C++ General > Code Analysis 선택
Syntax and Semantic Errors 선택 되어 잇는 부분을 해지 한다.

Code Analysis 설정 ]

ㄴ. NDK Includes 추가
 Project 우클릭 > Properties > C/C++ General > Paths and Symbols >  Add 선택
${NDK_ROOT}/platforms/android-19/arch-arm/usr/include 추가

[ Android NDK Includes 추가 ]

ㄷ. C++ Builer를 build_native.py로 변경
해 주어야 할거 같은데...
어디서 하는지 못 찾겠다 ㅋㅋㅋ



오늘도 여기까지만... 이제 소스 보는거랑 컴파일이랑 실행이랑 다 된다.
앞으로는 build_native.py,  Android.mk 등을 어떻게 수정 해야 할지 보면 될거 같다.

아 여기까지 하기 위해 프로젝트 생성만 얼마나 했던가...
이제 코딩 공부 Start ^^