ラベルでテキストを表示しよう (3/4)
作成:2015-05-30 08:37
更新:2015-05-30 08:37
更新:2015-05-30 08:37
■画面の好きな場所に配置する
Cocos2d-xのウィジェット(GUIの部品)を扱うとき、注意したいのが「表示場所をどう指定すればいいか?」でしょう。
ウィジェットの配置をするとき、「どこを基準にして位置を指定するか」をまず考えましょう。普通は、getVisibleOriginで取り出される位置となる左下からどれだけ離れているか?で指定をします。
が、それでは「右上に表示したい」なんて場合はどうすればいいのか、ちょっと考えてしまいますね。まずは、上下左右中央の位置の指定の仕方を理解し、そこからどれだけ離れた場所に置くか、を考えるようにするとよいでしょう。
では、下に簡単なサンプルを挙げておきます。これを見ながら、表示位置の設定の仕方をよく理解しておきましょう。
●画面の中央
中央に置く場合、アンカーポイントはウィジェットの中心に設定します。そしてoriginである左下から、visibleSizeの横幅・高さの半分だけ加算した位置に表示をします。
●画面の左下
左下は、サンプルでやりましたね。アンカーポイントを「0, 0」に設定し、originの位置に表示します。これは簡単ですね。
●画面の左上
左上の場合、アンカーポイントを「0, 1」に設定します。そして横幅はorigin.xに、高さはorigin.yにvisibleSize.heightを足した値に設定します。
●画面の右下
右下の場合、アンカーポイントは「1, 0」にします。そして横幅には、origin.xにvisibleSize.widthを足した値を設定します。高さはorigin.yに設定します。
●画面の右上
これが一番面倒です。アンカーポイントは「1, 1」に設定します。そして横幅はorigin.xにvisibleSize.widthを足した値に、高さはorigin.yにvisibleSize.heightを足した値に設定します。
ウィジェットの配置をするとき、「どこを基準にして位置を指定するか」をまず考えましょう。普通は、getVisibleOriginで取り出される位置となる左下からどれだけ離れているか?で指定をします。
が、それでは「右上に表示したい」なんて場合はどうすればいいのか、ちょっと考えてしまいますね。まずは、上下左右中央の位置の指定の仕方を理解し、そこからどれだけ離れた場所に置くか、を考えるようにするとよいでしょう。
では、下に簡単なサンプルを挙げておきます。これを見ながら、表示位置の設定の仕方をよく理解しておきましょう。
●画面の中央
ウィジェット->setAnchorPoint(Vec2(0.5, 0.5));
ウィジェット->setPosition(origin.x + visibleSize.width / 2,
origin.y + visibleSize.height / 2);
中央に置く場合、アンカーポイントはウィジェットの中心に設定します。そしてoriginである左下から、visibleSizeの横幅・高さの半分だけ加算した位置に表示をします。
●画面の左下
ウィジェット->setAnchorPoint(Vec2(0, 0));
ウィジェット->setPosition(origin.x, origin.y);
左下は、サンプルでやりましたね。アンカーポイントを「0, 0」に設定し、originの位置に表示します。これは簡単ですね。
●画面の左上
ウィジェット->setAnchorPoint(Vec2(0, 1));
ウィジェット->setPosition(origin.x,
origin.y + visibleSize.height);
左上の場合、アンカーポイントを「0, 1」に設定します。そして横幅はorigin.xに、高さはorigin.yにvisibleSize.heightを足した値に設定します。
●画面の右下
ウィジェット->setAnchorPoint(Vec2(1, 0));
ウィジェット->setPosition(origin.x +
visibleSize.width, origin.y);
右下の場合、アンカーポイントは「1, 0」にします。そして横幅には、origin.xにvisibleSize.widthを足した値を設定します。高さはorigin.yに設定します。
●画面の右上
ウィジェット->setAnchorPoint(Vec2(1, 1));
ウィジェット->setPosition(origin.x + visibleSize.width,
origin.y + visibleSize.height);
これが一番面倒です。アンカーポイントは「1, 1」に設定します。そして横幅はorigin.xにvisibleSize.widthを足した値に、高さはorigin.yにvisibleSize.heightを足した値に設定します。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
#pragma execution_character_set("utf-8")
#include "HelloWorldScene.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if (!Layer::init())
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
Director::getInstance()->setDisplayStats(false); // stats OFF
auto label0 = Label::createWithTTF("中央に表示する", "fonts/msgothic.ttc", 48);
label0->setAnchorPoint(Vec2(0.5, 0.5));
label0->setPosition(origin.x + visibleSize.width / 2, origin.y + visibleSize.height / 2);
this->addChild(label0, 1);
auto label1 = Label::createWithTTF("左下に表示する", "fonts/msgothic.ttc", 48);
label1->setAnchorPoint(Vec2(0, 0));
label1->setPosition(origin.x, origin.y);
this->addChild(label1, 1);
auto label2 = Label::createWithTTF("左上に表示する", "fonts/msgothic.ttc", 48);
label2->setAnchorPoint(Vec2(0, 1));
label2->setPosition(origin.x, origin.y + visibleSize.height);
this->addChild(label2, 1);
auto label3 = Label::createWithTTF("右上に表示する", "fonts/msgothic.ttc", 48);
label3->setAnchorPoint(Vec2(1, 1));
label3->setPosition(origin.x + visibleSize.width, origin.y + visibleSize.height);
this->addChild(label3, 1);
auto label4 = Label::createWithTTF("右下に表示する", "fonts/msgothic.ttc", 48);
label4->setAnchorPoint(Vec2(1, 0));
label4->setPosition(origin.x + visibleSize.width, origin.y);
this->addChild(label4, 1);
return true;
}
※関連コンテンツ
「初心者のためのCocos2d-xゲームプログラミング入門」に戻る