きょこみのーと

技術に関係ないほうのブログ

Cocos2d-x3.0betaきたのでさっそく対応しました

3.0betaキタ━━━━(゚∀゚)━━━━!!

はい、テンション高くてすみません。

毎回バージョンアップするごとにテンションもあがってます。

もうすぐ正式版きますね!!わくてか。

さて、今回の3.0alpha1から3.0betaへの対応は結構あっさりいけたのであまり書くことないですが一応。

Cocos2d-x 3.0betaをpullする

最新のソース取得。(githubのソースcloneしてtagをcheckoutしてつかってましたので)

kyokomi@kyokomi-MacBook-Air:/Applications/cocos2d-x ((cocos2d-x-3.0alpha1) *+)
$ git pull
remote: Counting objects: 20073, done.
remote: Compressing objects: 100% (8576/8576), done.
remote: Total 20073 (delta 12885), reused 17644 (delta 11110)
Receiving objects: 100% (20073/20073), 9.95 MiB | 518 KiB/s, done.
Resolving deltas: 100% (12885/12885), done.
From https://github.com/cocos2d/cocos2d-x
 * [new branch]      3d-extension -> origin/3d-extension
   f533c9c..559d85d  develop    -> origin/develop
   525a0a2..961eff4  master     -> origin/master
From https://github.com/cocos2d/cocos2d-x
 * [new tag]         cocos2d-x-2.2.2 -> cocos2d-x-2.2.2
 * [new tag]         cocos2d-x-3.0beta -> cocos2d-x-3.0beta
You are not currently on a branch. Please specify which
branch you want to merge with. See git-pull(1) for details.

    git pull <remote> <branch>

わーい。3.0betaきたー

checkoutする前にAndroid用でgradleつかってbuildするためにちょいちょいbuild.gradleとかplatform下に勝手置いてたので退避してからcheckoutしました。

kyokomi@kyokomi-MacBook-Air:/Applications/cocos2d-x ((cocos2d-x-3.0alpha1) *+)
$ git stash

kyokomi@kyokomi-MacBook-Air:/Applications/cocos2d-x ((cocos2d-x-3.0alpha1))
$ git checkout cocos2d-x-3.0beta
Previous HEAD position was ddac309... Merge pull request #4348 from boyu0/iss2771_physical
HEAD is now at deae348... Merge pull request #4988 from dumganhar/develop
kyokomi@kyokomi-MacBook-Air:/Applications/cocos2d-x ((cocos2d-x-3.0beta))
$

私がいじったファイルは特に競合しなさそうなので、git stash applyします。

kyokomi@kyokomi-MacBook-Air:/Applications/cocos2d-x ((cocos2d-x-3.0beta))
$ git stash apply
Auto-merging build/cocos2d_libs.xcodeproj/project.pbxproj
Auto-merging build/android-build.py
# Not currently on any branch.
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   build/android-build.py
#   modified:   build/cocos2d_libs.xcodeproj/project.pbxproj
#   modified:   cocos/2d/platform/android/java/.classpath
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   cocos/2d/platform/android/java/build.gradle
#   cocos/2d/platform/android/java/build/
no changes added to commit (use "git add" and/or "git commit -a")

Xcodeでcleanしてbuildしたらエラーと警告がガンガンでてきました。 (いつもどおり)

ビルド結果のエラーと警告の対応

cocos2d::Vectorの対応その1

CCArray乙!!

getChildrenでVectorが返ってくるのでCCARRAY_FOREACHマクロさんの役目が終わりました。

before

CCARRAY_FOREACH(pBatchNode->getChildren(), object)

after

for (auto pObject : pBatchNode->getChildren())

普通にforeachできるようになった!いいね!

String(元 CCString)の非推奨対応

これは正直焦った。

最初は「どういうことだってばよ。。。」状態でした。

冷静に考えるとできるだけstd::string使うようにしてたので、正直createWithFormatのやつが便利だったくらい。

それ以外でcocos2d::Stringには用が無かったことに気がついた。

そしてStringUtilsってのがあるのでそっち使うのが良いみたい。

before

String* pSpriteFileName = String::createWithFormat("item_%d.png", m_dropItemDto.imageResId);
if (!Sprite::initWithFile(pSpriteFileName->getCString()))

after

auto spriteFileName = StringUtils::format("item_%d.png", m_dropItemDto.imageResId);
if (!Sprite::initWithFile(spriteFileName))

かなりスッキリソース。getCString()書かなくていいのは地味に嬉しい。

Sequenceがcocos2d::Arrayを拒否る対応(Vector対応その2)

SequenceさんがArrayじゃcreateしねーよ?とエラーを吐いてました。

つまりVectorですね。

before

auto moveArray = Array::create();
for (MapIndex mapIndex : list)
{
    auto pMoveTo = MoveTo::create(1.0 / movePointSize, indexToPoint(mapIndex));
    moveArray->addObject(pMoveTo);
}
auto pMoveSeq = Sequence::create(moveArray);

after

auto moveArray = Vector<FiniteTimeAction*>();
for (MapIndex mapIndex : list)
{
    auto pMoveTo = MoveTo::create(1.0 / movePointSize, indexToPoint(mapIndex));
    moveArray.pushBack(pMoveTo);
}
auto pMoveSeq = Sequence::create(moveArray);

型指定大好きです!!

あと今まであまり触れてなかったDictionary(元 CCDictionary)も非推奨でcocos2d::Mapを使うようになったみたいですね。

Cocos独特な感じがドンドン改善されて、標準化されていく感じがいいですね!!

(型指定とかバリバリで言語的にはカチッとした感じのJavaが結構スキーなので)