スコア表示など、intやfloatなどをstringに変換したいケースはたくさんあると思います。
Cocos2d-xではStringUtils関数群が実装されているので、これを利用すると便利です。
Cocos2dx 3.x C++言語
TopTextScene.hを次のように変更してみてください。
#ifndef __TextLabel__TopTextScene__
#define __TextLabel__TopTextScene__
#include "cocos2d.h"
USING_NS_CC;
class TopTextScene :public Layer
{
protected:
// コンストラクタ
TopTextScene();
// デストラクタ
virtual ~TopTextScene();
// メソッド CREATE_FUNCとの連携
bool init() override;
public:
static cocos2d::Scene* createScene();
CREATE_FUNC(TopTextScene);
};
#endif /* defined(__TextLabel__TopTextScene__) */
TopTextScene.cppを次のように変更してみてください。
#include "TopTextScene.h"
// UI GUI用
USING_NS_CC; // cocos2d
using namespace std; // String*
// _/_/_/ コンストラクタ プロパティー _/_/_/
TopTextScene::TopTextScene()
{
}
// MainScene デストラクタで解放 メモリーリークを防ぐ
TopTextScene::~TopTextScene()
{
}
// createSceneはLayerをSceneに貼り付けて返すクラスメソッドです。
// 自分自身(TopTextScene)を生成し、空のSceneに貼り付けて返す簡単な処理を行っているだけです。
// これでほかのシーンからの遷移が楽に行えます。
Scene* TopTextScene::createScene()
{
auto scene = Scene::create();
auto layer = TopTextScene::create();
scene->addChild(layer);
return scene;
}
bool TopTextScene::init()
{
if ( !Layer::init() )
{
return false;
}
// 画面サイズを取得
Size winSize = Director::getInstance()->getVisibleSize();
// バックグランドカラー
auto background = LayerColor::create(Color4B::BLUE,
winSize.width,
winSize.height);
// バックグランドカラー 第2引数は表示順
this->addChild(background, 0);
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
// string型 文字(名前)
auto label = Label::createWithSystemFont("C++型", "arial", 70);
// ラベルの色:ホワイト
label->setColor(Color3B::WHITE);
//画面の中央に表示
label->setPosition(Point(winSize.width/2, winSize.height/1.2));
// Layerにラベルを追加
this->addChild(label);
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
// Label1::createWithSystemFont("文字列", "フォントの種類", 文字サイズ);
// string型ラベル
auto label1 = Label::createWithSystemFont("string型", "arial", 70);
// ラベルの色:ホワイト
label1->setColor(Color3B::WHITE);
//画面の中央に表示
label1->setPosition(Point(winSize.width/2 - 300, winSize.height/1.5));
// Layerにラベルを追加
this->addChild(label1);
// Label::createWithSystemFont("文字列", "フォントの種類", 文字サイズ);
// string型 文字
string _string = "Cocos2d-x";
auto label01 = Label::createWithSystemFont(_string, "arial", 70);
// ラベルの色:ホワイト
label01->setColor(Color3B::WHITE);
//画面の中央に表示
label01->setPosition(Point(winSize.width/2 + 200, winSize.height/1.5));
// Layerにラベルを追加
this->addChild(label01);
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
// int型ラベル
auto label2 = Label::createWithSystemFont("int型", "arial", 70);
// ラベルの色:ホワイト
label2->setColor(Color3B::WHITE);
//画面の中央に表示
label2->setPosition(Point(winSize.width/2 - 300, winSize.height/1.9));
// Layerにラベルを追加
this->addChild(label2);
// int型 数字
int _int = 12345;
auto label02 = Label::createWithSystemFont(StringUtils::toString(_int),"arial", 70);
// ラベルの色:ホワイト
label02->setColor(Color3B::WHITE);
//画面の中央に表示
label02->setPosition(Point(winSize.width/2 + 200, winSize.height/1.9));
// Layerにラベルを追加
this->addChild(label02);
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
// bool型ラベル
auto label3 = Label::createWithSystemFont("bool型", "arial", 70);
// ラベルの色:ホワイト
label3->setColor(Color3B::WHITE);
//画面の中央に表示
label3->setPosition(Point(winSize.width/2 - 300, winSize.height/2.5));
// Layerにラベルを追加
this->addChild(label3);
// bool型
bool _bool = true;
auto label03 = Label::createWithSystemFont(StringUtils::toString(_bool),"arial", 70);
// ラベルの色:ホワイト
label03->setColor(Color3B::WHITE);
//画面の中央に表示
label03->setPosition(Point(winSize.width/2 + 200, winSize.height/2.5));
// Layerにラベルを追加
this->addChild(label03);
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
// float型ラベル
auto label4 = Label::createWithSystemFont("float型", "arial", 70);
// ラベルの色:ホワイト
label4->setColor(Color3B::WHITE);
//画面の中央に表示
label4->setPosition(Point(winSize.width/2 - 300, winSize.height/3.5));
// Layerにラベルを追加
this->addChild(label4);
// float型
float _float = 1.2345f;
auto label04 = Label::createWithSystemFont
(StringUtils::toString(_float),"arial", 70);
// ラベルの色:ホワイト
label04->setColor(Color3B::WHITE);
//画面の中央に表示
label04->setPosition(Point(winSize.width/2 + 200, winSize.height/3.5));
// Layerにラベルを追加
this->addChild(label04);
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
// double型ラベル
auto label5 = Label::createWithSystemFont("double型", "arial", 70);
// ラベルの色:ホワイト
label5->setColor(Color3B::WHITE);
//画面の中央に表示
label5->setPosition(Point(winSize.width/2 - 300, winSize.height/6));
// Layerにラベルを追加
this->addChild(label5);
// double型
double _double = 1.2345;
auto label05 = Label::createWithSystemFont
(StringUtils::toString(_double),"arial", 70);
// ラベルの色:ホワイト
label05->setColor(Color3B::WHITE);
//画面の中央に表示
label05->setPosition(Point(winSize.width/2 + 200, winSize.height/6));
// Layerにラベルを追加
this->addChild(label05);
// ログ表示
log("string: %s", _string.c_str());
log("int: %d", _int);
log("bool: %d", _bool);
log("float: %f", _float);
log("double: %f", _double);
return true;
}
GitHub TextLabel_Cocos2d-x
変数から文字列を作成する
createWithFormatメソッドを利用すれば、文字列を作成できます。
これを、使えば変数をゲーム画面上に表示させたりすることができます。
// String 型 文字をラベル表示する
auto label01 = Label::createWithSystemFont(_string, "arial", 70);
this->addChild(label01);
// int 型 数字 `toString`を使ってスコアをラベル表示する
auto label02 = Label::createWithSystemFont(StringUtils::toString(_int),"arial", 70);
this->addChild(label02);
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
auto labelStr = StringUtils::format("結果は%d点でした。", 10);
log("%s", labelStr.c_str());
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Objective-Cでは以下のようにして利用をしてました。
int score = 1000;
NSString *score = [NSString stringWithFormat:@"スコア:%i",score];
これがcocos2dx Ver 3.xになるとこうなります。
#include <ui/CocosGUI.h>
USING_NS_CC; // cocos2d
using namespace ui;
using namespace std; // String*
int score = 1000;
String *score = String::createWithFormat("スコア:%i",score);
//キャスト変換
string _score = score->getCString();
// ラベル生成
auto label = Label::createWithSystemFont(_score,
"arial", 40);
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
// スコアをラベルの更新
ScoreLabel->setString(StringUtils::toString(score));
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
// ログ表示
log("string: %s", _string.c_str());
log("int: %d", _int);
log("bool: %d", _bool);
log("float: %f", _float);
log("double: %f", _double);
コメントをお書きください