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

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

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

■表示テキストとcocos2d::Stringについて

テキストの値は、C/C++ではCStringが基本になります。すなわち、char*(char配列のポインタ)として用意するわけですね。

ただし、これはとにかく使いにくい。そこでC++では、std::stringのようなクラスを用意して利用することが多いでしょう。

Cocos2d-xの場合、独自にcocos2d:Stringというクラスが用意されています。これを利用してテキストを作成すれば、CStringよりだいぶ便利に使えます。では、基本的な使い方をかんたんにまとめましょう。

●インスタンスの作成
auto 変数 = String( テキストリテラル );

インスタンスは、autoを指定して作成すれば簡単ですね。ヘッダー側で#include "cocos2d.h"していますから、わざわざcocos2d::Stringと書く必要はありません。String(~)でインスタンスが作成できます。

●テキストの接続
《String》.append( テキストリテラル );
《String》.appendWithFormat( フォーマット文字列 , 値…… );

2つのテキストを接続するには、appendを使います。これは、直接そのテキストを改変するので、返値などを受け取る必要はありません。またCではおなじみのフォーマット文字列を使ってテキストを生成しappendすることもできます。appendWithFormatは、第1引数にフォーマット指定子を使って記述されたフォーマット文字列を用意し、その後にはめ込む値を記述していきます。

●CStringの取得
char* 変数 = 《String》.getCString();

作成したテキストは、そのままLabel::createWithTTFに設定しようとするとエラーになります。これらの引数はCStringですので、Stringインスタンスはそのまま使えないのです。こうした場合には、getCStringCStringの値を取り出して利用します。

●数値の取得
int 変数 = 《String》.intValule();
uint 変数 = 《String》.uintValule();
float 変数 = 《String》.floatValule();
double 変数 = 《String》.doubleValule();

他、テキストを整数や実数の値として取り出すメソッドも用意されています。今すぐ使うことはないでしょうが、合わせて覚えておくと便利でしょう。


――では、簡単な利用例を下にあげておきます。Stringが使えると、テキストの扱いもずいぶんと楽になりますね。これで、Labelを利用したテキスト表示の基本はだいたい理解できたんじゃないでしょうか。

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

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 str = String("★サンプルテキスト★");
    str.append("\n ・追加するテキスト");
    str.appendWithFormat("\n \\%i.", 1234567);

    auto label = Label::createWithTTF(str.getCString(), "fonts/msgothic.ttc", 48);
    label->setAnchorPoint(Vec2(0, 1));
    label->setPosition(origin.x, origin.y + visibleSize.height);
    this->addChild(label, 1);

    return true;
}

※関連コンテンツ

「初心者のためのCocos2d-xゲームプログラミング入門」に戻る