【cocos2d-x】v2.0.4에서 v2.2.6로 단번에 올렸을 때 했던 것을 메모【iOS 64bit 대응】
iOS 64bit 대응
기존의 cocos2d-x 프로젝트의 64bit 대응이라고 하는 메(ry 안건이 긴급으로 뛰어들어 와서,
2015년 2월 1일부터 실시한다고 생각했습니다만,
구체적으로
원문
라는 것이었습니다만, 반사적으로 대응해 버렸기 때문에,
그때 했던 것을 메모해 둡니다.
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.cppbool init();
맞아, void에서 bool로 수정.
CCFileUtils::getWritablePath()
typo입니까?
이런 에러가 상당히 있었습니다.
Test.cpp
bool init();
맞아, void에서 bool로 수정.
CCFileUtils::getWritablePath()
typo입니까?
되어 있습니다. writable로 수정.
CCMenu::initWithItems()
v2.0.4에서는 initWithItems()라는 함수가 있었지만,
그 후, 사라진 것 같습니다.
대응 방법은 몇 가지 있다고 생각합니다.
이번에는 바삭바삭하게 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.cppvoid 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.cppvoid Test::receiveMenuItem(CCMenuItem* sender)
{
CCInteger* value = (CCInteger*)sender->getUserData();
}
래퍼 클래스를 사용하는 것이 맞습니다.
Error : expected unqualified-id
이것은 이전에도 썼기 때문에, 그쪽의 링크를 붙여 둡니다.
Qiita 기사
C++와 Obj-C가 혼합된 클래스가 있을 때 발생합니다.
Identify and Type → Type 을 Objective C++로 해 대응.
이상
우선 이런 걸로 빌드가 지나게 되었습니다.
세세한 동작까지는 파악할 수 없으므로,
만약 하는 분이 있으면 동작 확인은 확실히 실시합시다.
Reference
이 문제에 관하여(【cocos2d-x】v2.0.4에서 v2.2.6로 단번에 올렸을 때 했던 것을 메모【iOS 64bit 대응】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kuuki_yomenaio/items/a8628ae8cdad2f644e9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
//~
void * CCNode::getUserData()
{
return m_pUserData;
}
void CCNode::setUserData(void *var)
{
m_pUserData = var;
}
//~
void Test::receive(CCMenuItem* sender)
{
int value = (int)sender->getUserData(); // ←コレ
}
/*
void Test::receiveMenuItem(CCMenuItem* sender)
{
int value = *(int*)sender->getUserData();
}
*/
void Test::receiveMenuItem(CCMenuItem* sender)
{
CCInteger* value = (CCInteger*)sender->getUserData();
}
이것은 이전에도 썼기 때문에, 그쪽의 링크를 붙여 둡니다.
Qiita 기사
C++와 Obj-C가 혼합된 클래스가 있을 때 발생합니다.
Identify and Type → Type 을 Objective C++로 해 대응.
이상
우선 이런 걸로 빌드가 지나게 되었습니다.
세세한 동작까지는 파악할 수 없으므로,
만약 하는 분이 있으면 동작 확인은 확실히 실시합시다.
Reference
이 문제에 관하여(【cocos2d-x】v2.0.4에서 v2.2.6로 단번에 올렸을 때 했던 것을 메모【iOS 64bit 대응】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kuuki_yomenaio/items/a8628ae8cdad2f644e9d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【cocos2d-x】v2.0.4에서 v2.2.6로 단번에 올렸을 때 했던 것을 메모【iOS 64bit 대응】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kuuki_yomenaio/items/a8628ae8cdad2f644e9d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)