'잡다한것들전부/팁'에 해당되는 글 38건

  1. 2014.01.10 숫자에 세자리마다 콤마를 찍는 알고리즘
  2. 2014.01.10 [좌표] 좌표에 대해서 알아봅시다(convertToWorldSpace) 절대좌표
  3. 2014.01.08 [디자인패턴] cocos2d-x 싱글톤 싱글턴 패턴 구현
  4. 2014.01.07 [디버깅] GDB 사용하기
  5. 2014.01.07 [디버깅] ndk stack 사용법
  6. 2014.01.07 [디버깅] visual studio에서 GDB 실행?
  7. 2014.01.07 [디버깅] cocos2d-x Debug 팁
  8. 2014.01.07 cocos2d-x 소스 코드 주소
  9. 2014.01.07 [디버깅] cocos2d-x Ant 사용법
  10. 2014.01.07 [팁] 안드로이드 cocos2d-x 디버깅 시

숫자에 세자리마다 콤마를 찍는 알고리즘

|
int
util_add_comma_to_num(const char *str, char *buf, int buflen)
{
    int len;
    int shift;

    /* count given string */
    len = strlen(str);
    shift = -len;

    assert( buflen >= (len + len/3 +1));

    while (*str)
    {
        *buf++ = *str++;
        if (++shift && (shift % 3) == 0)
            *buf++= ',';
    }

    *buf = '\0';

    return 0;
}

출처 : http://kldp.org/node/38269

Trackback 0 And Comment 0

[좌표] 좌표에 대해서 알아봅시다(convertToWorldSpace) 절대좌표

|

[convertToWorldSpace]


convertToWorldSpace 함수에 대해서 알아봅시다.

예를 들어 게임을 제작시 배경하면을 스크롤 하는 기능을 넣을 시 배경화면에 자식노드를 넣고 처리할때 자식노드의 좌표를 알고 싶을때가 있다.

convertToWorldSpace는 부모 노드의 좌표를 기준으로 자식노드의 좌표를 구합니다.


               CCSize size = CCDirector::sharedDirector()->getWinSize(); CCSprite * background = CCSprite::create("HelloWorld.png"); background->setPosition(ccp(0,0)); this->addChild(background); CCSprite *closeSprite = CCSprite::create("CloseNormal.png"); closeSprite->setPosition(ccp(10,10)); background->addChild(closeSprite); CCPoint convertPos = background->convertToWorldSpace(closeSprite->getPosition()); CCLog("%2.f %2.f",convertPos.x, convertPos.y); CCLog("%2.f %2.f",closeSprite->getPosition().x, closeSprite->getPosition().y);



출력결과

-230 -150 10 10


배경화면이 480*320인 스프라이트를 0,0 좌표에 add해줄시 화면의 중간에 위치하게 됩니다.





close 스프라이트는 배경화면 기준으로 10,10 에 위치하게 되며

배경화면은 -240,-160 에서 부터 그려지게 되므로

배경화면을 기준으로 한 절대 좌표는 -230, -150이 됩니다.


만약 배경화면의 좌표를 480,320 으로 수정하면 아래 그림처럼 보이며

로그 값은

250,170

10,10 이 됩니다.





여기서 알수 있듯이. convertToWorldSpace는 setposition으로 준 값과 관계없이

디바이스상에서 보여주는 좌표를 기준으로 좌표를 변형해줍니다.






Trackback 0 And Comment 0

[디자인패턴] cocos2d-x 싱글톤 싱글턴 패턴 구현

|


#ifndef __SINGLETON_H__

#define __SINGLETON_H__

 

#include "cocos2d.h"

 

class SingletonClass{

private:

                  static SingletonClass * instance ;

                  ~SingletonClass(){/*empty*/};

                  SingletonClass(){

                                   value = 10;};

public:

                  static SingletonClass * getInstance();

                  static void releaseInstance();

 

                  int value;

                 

};

#endif

 

 

#include "Singleton.h"

 

SingletonClass * SingletonClass::instance = NULL ;

 

SingletonClass * SingletonClass::getInstance()

{

                  if (!instance)

                  {

                                   instance = new SingletonClass();

                  }

 

                 return instance;

}

 

void SingletonClass::releaseInstance()

{

                  if(instance) delete instance;

}

 



사용법

#include "Singleton.h"

CCLOG("VALUE %d", SingletonClass::getInstance()->value);

이런식으로 접근가능


Trackback 0 And Comment 0

[디버깅] GDB 사용하기

|
  • GNU 디버거
    소프트웨어/앱
  • 보통은 GDB라고 부르는 GNU 디버거는 GNU 소프트웨어 시스템을 위한 기본 디버거이다. GDB는 다양한 유닉스 기반의 시스템에서 동작하는 이식성있는 디버거로, 에이다, C, C++, 포트란 등의 여러 프로그래밍 언어를 지원한다. 위키백과

  • ndk gdb 를 연결해서 디버깅 하셔야 합니다. 
    android manifest 에서 debuggable true 로 주는 옵션이 있는데
    댓글로 설명하긴 조금 복잡하네요.
    ndk gdb 연결해서 debug 하는 방법을 한번 찾아보셔요


    에뮬에서만 되고 단말기에서는 안되나봄?


    Trackback 0 And Comment 0

    [디버깅] ndk stack 사용법

    |

    I made a bit of a progress and I want to share what I did.

    When you get errors like this on the LogCat, they are saved on $PROJECT_PATH/obj/local/armeabi where $PROJECT_PATH is the path to your cocos2d-x android project. To symbolicate the messages to something understandable, you can use the ndk-stack tool.

    Open up the Terminal (or Cygwin, not sure though) and type in

    cd $ANDROID_NDK
    adb logcat | ./ndk-stack -sym $PROJECT_PATH/obj/local/armeabi 
    

    where:
    $ANDROID_NDK is the path to your android NDK
    PROJECT_PATH is the path to your cocos2d-x android project

    After that, you will get a stack trace which points to certain files and line number where the crash occurred. Something like this:

    ********** Crash dump: **********
    Build fingerprint: 'generic/blaze/blaze:2.3.4/GINGERBREAD/6.3.1_user_4107920:user/release-keys'
    pid: 16346, tid: 16354  >>> com.mycompany.myapp <<<
    signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
    Stack frame #00  pc 002a13f0  /data/data/com.mycompany.myapp/lib/libmyapp.so: Unable to locate routine information for address 2a13f0 in module
    Stack frame #01  pc 0012e81e  /data/data/com.mycompany.myapp/lib/libmyapp.so: Routine updateNode in jni/../../Classes/TowerObj.cpp:150
    Stack frame #02  pc 000f3648  /data/data/com.mycompany.myapp/lib/libmyapp.so: Routine updateLayer in jni/../../Classes/BuilderLayer.cpp:107
    Stack frame #03  pc 0010bb94  /data/data/com.mycompany.myapp/lib/libmyapp.so: Routine updateGame in jni/../../Classes/MainGameLayer.cpp:172
    
    ( more here pointing to cocos2d-x classes )
    

    From the dump above, you can see that on Stack frame #01 points to TowerObj.cpp:150, so I can now go to TowerObj.cpp at line 150 and fix stuff.

    Hope this helps.


    Trackback 0 And Comment 0

    [디버깅] visual studio에서 GDB 실행?

    |

    http://visualgdb.com/tutorials/android/

    '잡다한것들전부 > ' 카테고리의 다른 글

    [디버깅] GDB 사용하기  (0) 2014.01.07
    [디버깅] ndk stack 사용법  (0) 2014.01.07
    [디버깅] visual studio에서 GDB 실행?  (0) 2014.01.07
    [디버깅] cocos2d-x Debug 팁  (0) 2014.01.07
    cocos2d-x 소스 코드 주소  (0) 2014.01.07
    [디버깅] cocos2d-x Ant 사용법  (0) 2014.01.07
    Trackback 0 And Comment 0

    [디버깅] cocos2d-x Debug 팁

    |

    NFIsNOT//최근 버전에서는 ndkgdb.sh 파일이 추가되었습니다.

    환경변수만 복사해서 이클립스에 추가하고 디버깅 걸어주면 디버깅이 뙇!!



    ndk-stack 한번 써보세요 
    네이티브에서 뻗으면 스택이 찍혀요

    Trackback 0 And Comment 0

    cocos2d-x 소스 코드 주소

    |

    https://github.com/syuhari/cocos2dx_recipe


    cocos2d-x 개발하시는 분들에게 제일 필요한 말대신 상황별 예제만 모아놓은 책


    Trackback 0 And Comment 0

    [디버깅] cocos2d-x Ant 사용법

    |
  • Apache Ant
    소프트웨어/앱
  • Apache Ant는 자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구이다. 유닉스나 리눅스에서 사용되는 make와 비슷하나 자바언어로 구현되어 있어 자바 실행환경이 필요하며 자바 프로젝트들을 빌드하는데 표준으로 사용된다. make와 눈에 띄는 가장 다른 부분은 빌드를 위한 환경구성을 XML 파일을 사용한다는 점이다. 기본적인 빌드 파일명은 build.xml 이다.







  • cocos2d-x 로 개발하면서 디버그는 포기했네요....

    이클립스 안 쓰고 Ant 로도 가능해요.
    근데 어차피 JNI 부분 추가하다보면 결국에 쓰게 되더라구요.




    추가로 cygwin도 좋지만 저는 걍 맥에서 개발합니다.
    배시쉘이나 기타 쉘에 path는 따로 지정해야 하며 툴 위치 역시 지정해야 합니다.
    그리고 cocos sdk폴더가 아닌 외부에서 빌드하실려면 코코스 위치 정보를 지정해야 합니다.
    거기에 필요한게 ndk_module_path 인데요.
    ($(call import-module,cocos2dx) 같은거 호출을 위해 필요)
    이건 프로젝트 폴더에 보면 buid_native.sh가 있습니다. 그안에 젤 밑에 줄에 보면 있어요.
    거기에 지정하시면 됩니다.;
    그러면 빌드되요. 
    이후 ant를 써서 ant debug라고 치시면 패키징이 만들어집니다.
    이 패키지를 adb install을 통해 디바이스에 올리시면 됩니다.

    그리고 디버깅은 포기하세요.. ㅋㅋ vc환경에서 dll물려서 하는 방법도 있긴 하지만 그건 비추이구요.;










    '잡다한것들전부 > ' 카테고리의 다른 글

    [디버깅] cocos2d-x Debug 팁  (0) 2014.01.07
    cocos2d-x 소스 코드 주소  (0) 2014.01.07
    [디버깅] cocos2d-x Ant 사용법  (0) 2014.01.07
    [팁] 안드로이드 cocos2d-x 디버깅 시  (0) 2014.01.07
    cocos2d-x 로딩 관련  (0) 2014.01.06
    cocos2d-x 샘플 소스 소개  (0) 2014.01.06
    Trackback 0 And Comment 0

    [팁] 안드로이드 cocos2d-x 디버깅 시

    |

    출처 : http://www.androidpub.com/1943024


    ndk 디버그








    안드로이드 ant

    Apache Ant

    위키백과, 우리 모두의 백과사전.
    Apache Ant (Another Neat Tool)
    Apache Ant Logo
    개발자아파치 소프트웨어 재단
    최근 버전1.9.2 / 2013년 7월 12일, 179일 경과
    프로그래밍 언어자바
    운영 체제크로스 플랫폼
    종류빌드 도구
    라이선스아파치 라이선스 2.0
    웹사이트http://ant.apache.org

    Apache Ant는 자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구이다. 유닉스나 리눅스에서 사용되는 make와 비슷하나 자바언어로 구현되어 있어 자바 실행환경이 필요하며 자바 프로젝트들을 빌드하는데 표준으로 사용된다.

    make와 눈에 띄는 가장 다른 부분은 빌드를 위한 환경구성을 XML 파일을 사용한다는 점이다. 기본적인 빌드 파일명은 build.xml 이다.

    로고는 이름(ANT)에 따라 개미 모양으로 만들어졌으나 이는 Another Neat Tool의 약어라고 한다. [1]

    최초 빌드 도구로서 제작되었으나 점점 많은 기능이 추가되면서 빌드와 배포, 유닛 테스트 등을 포함하는 통합 툴로서 발전되고 있다.

    역사[편집]

    Ant는 선 마이크로시스템즈에서 나중에 톰캣으로 발전하게 되는 JSP/Servlet 표준구현 엔진을 오픈소스화 하던 중 제임스 던컨 데이비슨에 의해 최초로 구상되었다. 사유 소프트웨어인 make를 이용하여 솔라리스에서 작업했으나 다른 환경에서는 이를 수행할 수 있는 오픈소스 소프트웨어가 없었기 때문이다.

    Ant의 최초 버전은 시스템 독립적으로 톰캣을 빌드하기 위한 툴로서 생겨났으며 2000년 7월 19일 독립형 제품으로서 발표되었다(1.1 버전). 처음에는 자카르타 프로젝트의 하위 프로젝트로서 시작했으나 2002년 10월 18일 아파치의 최상위 프로젝트로 승격해서 현재에 이르고 있다.

    수많은 오픈소스가 Ant 를 통한 자동 빌드를 지원하고 있으며 명실상부한 자바 프로젝트의 공식적인 빌드 도구로서 사용된다.

    버전별 최소 요구 자바 버전[편집]

    Apache Ant는 각 버전별로 다음과 같은 최소 자바 버전을 요구한다. 단, 컴파일 작업이 필요하기 때문에 JRE가 아닌 JDK가 필요하며 일부 필수 패키지가 아닌 선택적 패키지의 경우는 아래 내용보다 더 높은 버전을 요구할 수 있다. [2]

    버전별 최소 요구 자바버전
    Ant 버전최소 자바 버전
    1.1 ~ 1.5.41.1
    1.6.0 ~ 1.6.51.2
    1.7.0 ~ 1.7.11.3
    1.8.0 ~ 1.8.31.4
    현재 개발버전(SVN trunk)1.5(5.0)

    같이 보기[편집]

    참고 자료[편집]

    1. 이동 (영어) Apache Ant - FAQ아파치 소프트웨어 재단. 2012년 6월 17일에 확인.
    2. 이동 (영어) Which version of Java is required to run Apache Ant?아파치 소프트웨어 재단. 2012년 6월 17일에 확인.

    바깥 고리[편집]








    ndk-stack 사용하


    NDK 작업시 Error 메세지가 아래와 같이 휴머니즘이 부족할때
      -> symbol로 표시된 주소에 정보가 숨어 있다. 이때 ndk-stack을 사용하자..
          ndk-stack 은 gdb objdump 를 쉽게 해주는 명령어 같다..

    1. 해당 프로젝트로 이동
    cd /Users/user/Downloads/cocos2d-cocos2d-x-124aee8/HelloWorld/android 

    2. ndk-stack 를 환경페스로 잡아준다. 파란색은 프로젝트 경로
    adb logcat |  ndk-stack -sym /Users/user/Downloads/cocos2d-cocos2d-x-124aee8/HelloWorld/android/obj/local/armeabi

      
    3. 결과 
    ********** Crash dump: **********
    Build fingerprint: 'kt_kr/htc_ace/ace:2.3.3/GRI40/98479:user/release-keys'
    pid: 20454, tid: 20466  >>> org.cocos2dx.application <<<
    signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
    Stack frame #00  pc 00015dd8  /system/lib/libc.so
    Stack frame #01  pc 0001ca5c  /system/lib/libc.so
    Stack frame #02  pc 000f0f6e  /data/data/org.cocos2dx.application/lib/libcocos2d.so: Routine initFromNormalSprite in jni/../../../cocos2dx/menu_nodes/CCMenuItem.cpp:501
    Stack frame #03  pc 000f1464  /data/data/org.cocos2dx.application/lib/libcocos2d.so: Routine initFromNormalImage in jni/../../../cocos2dx/menu_nodes/CCMenuItem.cpp:628
    Crash dump is completed

    id: 그냥가자그냥가자

    저는 그냥 gdb로 직접 조회하는 편이긴 한데... /obj/local/armeabi 이게 핵심이네요...

    댓글
    2012.01.17 14:02:37
    id: 아즈라엘아즈라엘

    ndk-gdb 사용하시는가봐요?

    .so 위치에서 해야 되는거 같기도 하고..하도 삽질을 이상하게 해서 기역이 가물하네요 ..

    예전에 해봤을땐 잘 안붙는거 같은데 .. 디바이스 gdb서버가 안좋은거 같기도 하고..^^

    아니면 제가 명령어를 잘 몰라서 그런거 일수도 있고..ㅜㅜ

    댓글
    2012.01.17 17:29:21
    id: 그냥가자그냥가자

    저는 그냥 arm-eabi-gdb 씁니다. ndk-gdb도 동작이 좀 희한해서 ㅡㅡㅋ

    댓글
    2012.01.17 20:53:14
    id: 아즈라엘아즈라엘

    한번 시도해 봐야겠네요..^^

    좋은 정보 감사합니다.


    Trackback 0 And Comment 0
    prev | 1 | 2 | 3 | 4 | next