libro
www.tuyano.com
初心者のためのCocos2d-xゲームプログラミング入門

ラベルでテキストを表示しよう (3/4)

作成:2015-05-30 08:37
更新:2015-05-30 08:37

■画面の好きな場所に配置する

Cocos2d-xのウィジェット(GUIの部品)を扱うとき、注意したいのが「表示場所をどう指定すればいいか?」でしょう。

ウィジェットの配置をするとき、「どこを基準にして位置を指定するか」をまず考えましょう。普通は、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.yvisibleSize.heightを足した値に設定します。

●画面の右下
ウィジェット->setAnchorPoint(Vec2(1, 0));
ウィジェット->setPosition(origin.x +
    visibleSize.width, origin.y);

右下の場合、アンカーポイントは「1, 0」にします。そして横幅には、origin.xvisibleSize.widthを足した値を設定します。高さはorigin.yに設定します。

●画面の右上
ウィジェット->setAnchorPoint(Vec2(1, 1));
ウィジェット->setPosition(origin.x + visibleSize.width,
    origin.y + visibleSize.height);

これが一番面倒です。アンカーポイントは「1, 1」に設定します。そして横幅はorigin.xvisibleSize.widthを足した値に、高さはorigin.yvisibleSize.heightを足した値に設定します。

※プログラムリストが表示されない場合

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ゲームプログラミング入門」に戻る