- 公開日:2016年10月15日
記事概要
cocos2d-xの学習中に発生したエラーと解決方法のまとめです。
忘備録的なメモですが、なにかの役に立てばと思いUPします。
使用している本(以下、教材)は
です。
環境
- Android Studio 2.2.0
- OS X El Capitan
- android sdk 24
- cocos2d-x 3.13.1
画面のサイズの調整
教材 p85 の画面のサイズの調整がうまくいかない。
コードは以下の通りです。
// 画面サイズ Size visibleSize { Director::getInstance()->getVisibleSize()}; // 背景 Sprite* bgSprite { Sprite::create("title_bg.png")}; // 座標の設定 bgSprite->setPosition(visibleSize / 2); this->addChild(bgSprite);
画像をスケールするように、コードを以下のように変更する
// 画面サイズ Size visibleSize { Director::getInstance()->getVisibleSize()}; // 背景 Sprite* bgSprite { Sprite::create("title_bg.png")}; // 画像サイズの取得 CCSize imgSize = bgSprite->getContentSize(); // スケール bgSprite->setScale(visibleSize.width/imgSize.width, visibleSize.height/imgSize.height); bgSprite->setPosition(visibleSize / 2); this->addChild(bgSprite);
上記の実装で、画面がスケールされて表示される。
しかし、コンパイル時に以下のwarningが発生する。
warning: 'cocos2d::CCSize' is deprecated
CCSizeの実装を変更する
// 画面サイズ Size visibleSize { Director::getInstance()->getVisibleSize()}; // 背景 Sprite* bgSprite { Sprite::create("title_bg.png")}; // 画像サイズの取得 Size imgSize = bgSprite->getContentSize(); // スケール bgSprite->setScale(visibleSize.width/imgSize.width, visibleSize.height/imgSize.height); bgSprite->setPosition(visibleSize / 2); this->addChild(bgSprite);
CCSize から Size にするとwarningが消えます。
ui::Buttonなども同じように画像をスケールすることで対応できました。
画面のサイズの調整2
P104 のゲーム画面の作成で、画面サイズが自分の利用している端末だとうまくいかなくて、思いどおりに作成できない事案が発生。 調べたところ、AppDelegate.cppに以下のコードを発見。
static cocos2d::Size designResolutionSize = cocos2d::Size(480, 320); static cocos2d::Size smallResolutionSize = cocos2d::Size(480, 320); static cocos2d::Size mediumResolutionSize = cocos2d::Size(1024, 768); static cocos2d::Size largeResolutionSize = cocos2d::Size(2048, 1536); if (frameSize.height > mediumResolutionSize.height) { director->setContentScaleFactor(MIN(largeResolutionSize.height/designResolutionSize.height, largeResolutionSize.width/designResolutionSize.width)); } // if the frame's height is larger than the height of small size. else if (frameSize.height > smallResolutionSize.height) { director->setContentScaleFactor(MIN(mediumResolutionSize.height/designResolutionSize.height, mediumResolutionSize.width/designResolutionSize.width)); } // if the frame's height is smaller than the height of medium size. else { director->setContentScaleFactor(MIN(smallResolutionSize.height/designResolutionSize.height, smallResolutionSize.width/designResolutionSize.width)); }
自動生成のデフォルトコードでは、setContentScaleFactorでスケールサイズを決めている。
これは、端末のディスプレイサイズによらずサイズを指定するために使用する関数なので、学習初期には不要と判断して消して対応した。
マルチサイズは、フレームワークのメソッドの仕様をある程度把握してから取りかかる方が学習効率が良い。
以下のように変更した。
static cocos2d::Size designResolutionSize = cocos2d::Size(480, 320); static cocos2d::Size smallResolutionSize = cocos2d::Size(480, 320); static cocos2d::Size mediumResolutionSize = cocos2d::Size(1024, 768); static cocos2d::Size largeResolutionSize = cocos2d::Size(2048, 1536); // if (frameSize.height > mediumResolutionSize.height) // { // director->setContentScaleFactor(MIN(largeResolutionSize.height/designResolutionSize.height, largeResolutionSize.width/designResolutionSize.width)); // } // if the frame's height is larger than the height of small size. // else if (frameSize.height > smallResolutionSize.height) // { // director->setContentScaleFactor(MIN(mediumResolutionSize.height/designResolutionSize.height, mediumResolutionSize.width/designResolutionSize.width)); // } // if the frame's height is smaller than the height of medium size. // else // { // director->setContentScaleFactor(MIN(smallResolutionSize.height/designResolutionSize.height, smallResolutionSize.width/designResolutionSize.width)); // } }
コメントアウトします。
これを外すと、スケールを考える必要がなくなる。
あとは、setPositionのVec2で微調節します。
以上です
注意
学習中なので、非効率な点があるかもしれませんが、ご容赦ください。 後で見直すので、気がついたら随時修正します。
学習時は、C++未経験ならロベールのC++も一緒に利用しましょう。 本のコード説明部分のreturn部分がよく省略されているのが気になります。
参考サイト
0 件のコメント:
コメントを投稿