【cocos2d-x】v2.0.4에서 v2.2.6로 단번에 올렸을 때 했던 것을 메모【iOS 64bit 대응】

5557 단어 iOScocos2d-x

iOS 64bit 대응



기존의 cocos2d-x 프로젝트의 64bit 대응이라고 하는 메(ry 안건이 긴급으로 뛰어들어 와서,
2015년 2월 1일부터 실시한다고 생각했습니다만,
구체적으로
  • 신규 = 2015년 2월 1일부터 64bit 대응하지 않으면 신청 통하지 않습니다
  • 갱신 = 2015년 6월 1일부터 64bit 대응하지 않으면 신청 통하지 않습니다

  • 원문

    라는 것이었습니다만, 반사적으로 대응해 버렸기 때문에,
    그때 했던 것을 메모해 둡니다.

    cocos2d-x v2 시스템 정보



    cocos2d-x v2.0.4의 프로젝트를 그대로,
    arm64를 architectures에 넣고 빌드하면 다음과 같은 오류가 발생했습니다.



    cocos2d-x v2계는 발표가 나왔을 당시 64bit에 대응하고 있지 않았습니다.

    그 때 다음 주제에서 대응 논의가 되었습니다.
    cocos2d-x v2계 64bit에 대해서

    그리고 64bit 대응 버전 v2.2.6이 출시되었으므로,
    그 곳에 갱신했을 때에 한 일을 메모해 둡니다.

    void init()





    이런 에러가 상당히 있었습니다.

    Test.cpp
    bool init();
    

    맞아, void에서 bool로 수정.

    CCFileUtils::getWritablePath()





    typo입니까?
  • v2.0.4 : writeable
  • v2.2.6 : writable

  • 되어 있습니다. writable로 수정.

    CCMenu::initWithItems()





    v2.0.4에서는 initWithItems()라는 함수가 있었지만,
    그 후, 사라진 것 같습니다.

    대응 방법은 몇 가지 있다고 생각합니다.
  • CCMenu를 확장하고 initWithItems ()를 만듭니다
  • initWithItems는 결국 CCAray화 → initWithArray() 하고 있을 뿐이므로, 그렇게 한다
  • 다른 방법으로 한다(사용하지 않거나라든지)

  • 이번에는 바삭바삭하게 initWithArray를 사용하도록 수정.

    Error : Cast from pointer to smaller type ~





    이런거.
    이것은 무엇인가라고 하면, CCNode의 getUserData()의 반환값을 int에 캐스트 하고 있는 경우에 발생합니다.

    CCNode.cpp
    //~
    void * CCNode::getUserData()
    {
        return m_pUserData;
    }
    
    void CCNode::setUserData(void *var)
    {
        m_pUserData = var;
    }
    //~
    

    Test.cpp
    void Test::receive(CCMenuItem* sender)
    {
        int value = (int)sender->getUserData(); // ←コレ
    }
    

    이런 식으로 사용하거나하면 나옵니다.
    cocos라고 말하는 것보다, C → C++ 의 문제일까?

    다음과 같이 대응.

    Test.cpp
    /*
    void Test::receiveMenuItem(CCMenuItem* sender)
    {
        int value = *(int*)sender->getUserData();
    }
    */
    

    추기:상기 실장이라고 실행시에 떨어졌습니다.
    솔직하게

    Test.cpp
    void Test::receiveMenuItem(CCMenuItem* sender)
    {
        CCInteger* value = (CCInteger*)sender->getUserData();
    }
    

    래퍼 클래스를 사용하는 것이 맞습니다.

    Error : expected unqualified-id



    이것은 이전에도 썼기 때문에, 그쪽의 링크를 붙여 둡니다.
    Qiita 기사

    C++와 Obj-C가 혼합된 클래스가 있을 때 발생합니다.
    Identify and Type → Type 을 Objective C++로 해 대응.

    이상



    우선 이런 걸로 빌드가 지나게 되었습니다.
    세세한 동작까지는 파악할 수 없으므로,
    만약 하는 분이 있으면 동작 확인은 확실히 실시합시다.

    좋은 웹페이지 즐겨찾기