LoginSignup
11

More than 5 years have passed since last update.

【cocos2d-x】v2.0.4からv2.2.6に一気に上げた際にやったことをメモ【iOS 64bit対応】

Last updated at Posted at 2015-01-08

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に入れてビルドしたら以下のようなエラーが出ました。

1.png

cocos2d-x v2系はアナウンスが出た当時、64bitに対応していませんでした。

その時に以下のトピックで対応の議論がされていました。
cocos2d-x v2系 64bitについて

そして64bit対応版v2.2.6がリリースされましたので、
そちらに更新した際に行った事をメモっておきます。

void init()

2.png

こんなエラーが結構ありました。

Test.cpp
bool init();

が正しいので、voidからboolに修正。

CCFileUtils::getWritablePath()

3.png

typoですかね。

  • v2.0.4 : writeable
  • v2.2.6 : writable

となっています。writableに修正。

CCMenu::initWithItems()

4.png

v2.0.4ではinitWithItems()という関数があったのですが、
その後、無くなったようです。

対応方法はいくつかあると思います。

  • CCMenuを拡張し、initWithItems()を作っちゃう
  • initWithItemsは結局CCArray化→initWithArray()してるだけなので、そうする
  • 別のやり方にする(使わないとか)

今回はサクッとinitWithArrayを使うように修正。

Error : Cast from pointer to smaller type ~

5.png

こんなの。
これは何かと言いますと、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 : expacted unqualified-id

これは以前にも書きましたので、そっちのリンクを貼っておきます。
Qiita記事

C++とObj-Cが混在しているクラスがあると発生します。
Identify and Type → Type を Objective C++にして対応。

以上

とりあえずこんなもんでビルドが通るようになりました。
細かい動作までは把握しきれていませんので、
もしやる方がいたら動作確認はしっかりと行いましょう。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11