質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

Q&A

解決済

1回答

2432閲覧

cocos2d-x Ver.3 背景画像を画面いっぱいに表示させたい

orca51

総合スコア7

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

0グッド

0クリップ

投稿2017/06/04 04:14

編集2017/06/04 04:25

###前提・実現したいこと
setDesignResolutionSize()を使って背景を比率そのままで画面いっぱいに表示させたい。(若干黒い帯が出現しても可。)

###内容
現在、書籍「cocos2d-xではじめるスマートフォンゲーム開発(2015年初版)」を参考にcocos2d-x(Ver.3)を学ぼうとしているのですが、背景の画像をiOSシミュレーターの画面全体に表示させることができなくて困っています。(書籍内4.2章)

書籍にはAppDelegate.cpp内に

c++

1// すべての端末で画面サイズを320 * 480として扱う 2glview->setDesignResolutionSize(320, 480, ResolutionPolicy::SHOW_ALL);

を記述すれば良いと書かれていましたが、実際に起動してみると背景の画像が画面中央に小さく表示されているのみで、とても画面いっぱいに表示されているとは思えない状況です。

背景素材の大きさは320 * 480です。

何か別の方法などがあれば教えて欲しいです。

###試したこと

  • シミュレーターの種類(iPhone7やiPhone SEなど)を切り替えて試したが効果なし。

###補足情報(言語/FW/ツール等のバージョンなど)
Xcode(ver 8.2.1)
cocos2d-x (Ver 3.15.1)
OS X(El Capitan)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

cocos2d-xでは、DesignResolutionSizeとContentScaleFactorによって使用する素材の原寸が決まります。

DesignResolutionSizeContentScaleFactor素材のサイズ
320x4801.0320x480
320x4802.0640x960

画面中央に小さく表示されているという事は、ContentScaleFactorが2.0などに設定されているのではないでしょうか?

cocos newコマンドで作成した直後のAppDelegate.cppには、ContentScaleFactorを変更する処理が記載されています。
この部分は邪魔なので自分で削除しなければなりません。
しかし、それについては書籍では触れられていません。

考えれば分かる事なので説明がないのかもしれません。
私もこの書籍を持っていますが、本書には説明不足やミス、cocos2d-xのバージョンが古い事によるエラーなどが多々ありますので、自分でおかしいと思うところは理屈を元に整理して書き換えましょう。

参考までに、v3.15.1で新規にプロジェクトを作成し、DesignResolutionSizeとContentScaleFactorを設定する例を示しますので、参考にしてみてください。

cpp

1#include "AppDelegate.h" 2... 3USING_NS_CC; 4 5// 画面サイズ 6static const cocos2d::Size DESIGN_RESOLUTION_SIZE = cocos2d::Size(320, 480); 7// 画面サイズに対する素材の倍率 8static const float CONTENT_SCALE_FACTOR = 1.0; 9... 10bool AppDelegate::applicationDidFinishLaunching() { 11 // initialize director 12 auto director = Director::getInstance(); 13 auto glview = director->getOpenGLView(); 14 if(!glview) { 15#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX) 16 glview = GLViewImpl::createWithRect("Sample", cocos2d::Rect(0, 0, DESIGN_RESOLUTION_SIZE.width, DESIGN_RESOLUTION_SIZE.height)); 17#else 18 glview = GLViewImpl::create("Sample"); 19#endif 20 director->setOpenGLView(glview); 21 } 22 23 // turn on display FPS 24 director->setDisplayStats(true); 25 26 // set FPS. the default value is 1.0/60 if you don't call this 27 director->setAnimationInterval(1.0f / 60); 28 29 glview->setDesignResolutionSize(DESIGN_RESOLUTION_SIZE.width, DESIGN_RESOLUTION_SIZE.height, ResolutionPolicy::SHOW_ALL); 30 director->setContentScaleFactor(CONTENT_SCALE_FACTOR); 31 32 register_all_packages(); 33 34 // create a scene. it's an autorelease object 35 auto scene = HelloWorld::createScene(); 36 37 // run 38 director->runWithScene(scene); 39 40 return true; 41}

追記

なお、以下が初期状態のAppDelegate.cppでContentScaleFactorをデバイスの画面サイズによって変更している箇所です。
これを残しておくと、今回のように意図しない動きになってしまうので、
cocos newでプロジェクトを作った後は、毎回削除しましょう。

cpp

1... 2static cocos2d::Size designResolutionSize = cocos2d::Size(480, 320); 3static cocos2d::Size smallResolutionSize = cocos2d::Size(480, 320); 4static cocos2d::Size mediumResolutionSize = cocos2d::Size(1024, 768); 5static cocos2d::Size largeResolutionSize = cocos2d::Size(2048, 1536); 6... 7bool AppDelegate::applicationDidFinishLaunching() { 8... 9 // Set the design resolution 10 glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER); 11 auto frameSize = glview->getFrameSize(); 12 // if the frame's height is larger than the height of medium size. 13 if (frameSize.height > mediumResolutionSize.height) 14 { 15 director->setContentScaleFactor(MIN(largeResolutionSize.height/designResolutionSize.height, largeResolutionSize.width/designResolutionSize.width)); 16 } 17 // if the frame's height is larger than the height of small size. 18 else if (frameSize.height > smallResolutionSize.height) 19 { 20 director->setContentScaleFactor(MIN(mediumResolutionSize.height/designResolutionSize.height, mediumResolutionSize.width/designResolutionSize.width)); 21 } 22 // if the frame's height is smaller than the height of medium size. 23 else 24 { 25 director->setContentScaleFactor(MIN(smallResolutionSize.height/designResolutionSize.height, smallResolutionSize.width/designResolutionSize.width)); 26 } 27... 28}

投稿2017/06/04 07:42

編集2017/06/04 07:47
mingos

総合スコア4025

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

orca51

2017/06/04 09:32

詳しい説明ありがとうございます。おかげ様で画面全体に背景画像が表示されるようになりました。 追記を含めて削除するべき部分を削除していなかったことが原因でしたので、以後注意していきたいと思います。本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問