Cocos2dx 3.0 LabelTTFのスクロール表示とか左寄席とかあれこれ

raharu(仮名)(プログラマー)
これがダイバージェンス1%の先の世界か。。。

なんかよくわからないタイトルになりましたすいません。

とりあえずこんな文言をなんとか表示させたいのです。

日本の地獄は自慢の地獄
罪にあわせておもてなし
(はい!)
日本の地獄はじゅうろくしょう地獄!
全部合わせて、にひゃくななじゅうにもあるーーーーーー!!
ここは地獄!地獄!素敵な地獄!
地獄、じご、じご、じごくだよ~!!
ここは地獄!地獄!楽しい地獄!
地獄、じご、じご、じごくだよ~!!
等活(とうかつ)黒縄(こくじょう)衆合(しゅうごう)
叫喚(きょうかん)
大叫喚(だいきょうかん)
焦熱(しょうねつ)に 大焦熱(だいしょうねつ) 阿鼻!!
不喜処(ふきしょ)(に)瓮熟処(おうじゅくしょ)、
如飛虫堕処(にょひちゅうだしょ)
受苦無有数量処(じゅくむうすうりょうしょ)
屎泥処(しでいしょ)(に)、刀輪処(とうりんしょ)
多苦処(たくしょ)(に)闇冥処(あんみゅうしょ)(に)極苦処(ごくくしょ)
頞部陀(あぶだ)、刺部陀(にらぶだ)
頞听陀(あただ)、臛臛婆(かかば)、虎虎婆(ここば)
嗢鉢羅(うばら)、(に)、鉢特摩(はどま)(に)摩訶鉢特摩(まかはどま)
衆病処(しゅうびょうしょ)、(ったら) 雨鉄処(うてつしょ)、(ったら)
悪杖処(あくじょうしょ)、黒色鼠狼処(こくしょくそうろうしょ)、
針山、血の池、まだまだ色々!
地獄はあるかもしれないよ!!
この世の行い気をつけてー!
ここは地獄!地獄!素敵な地獄!
地獄、じご、じご、じごくだよ~!!
ここは地獄!地獄!楽しい地獄!
地獄、じご、じご、じご、じご、じご、
じご、じご、じご、じご、じご、じごくだよ~!!
嗚呼~

鬼灯の冷徹なのはただの趣味です、気にしないでください。

とりあえず適当に表示させて見る

1
2
3
4
auto string_txt = "日本の地獄は自慢の地獄\n罪にあわせておもてなし\n(はい!)\n日本の地獄はじゅうろくしょう地獄!\n全部合わせて、にひゃくななじゅうにもあるーーーーーー!!\n\nここは地獄!地獄!素敵な地獄!\n地獄、じご、じご、じごくだよ~!!\n\nここは地獄!地獄!楽しい地獄!\n地獄、じご、じご、じごくだよ~!!\n\n等活(とうかつ)黒縄(こくじょう)衆合(しゅうごう)\n叫喚(きょうかん)\n大叫喚(だいきょうかん)\n焦熱(しょうねつ)に 大焦熱(だいしょうねつ) 阿鼻!!\n不喜処(ふきしょ)(に)瓮熟処(おうじゅくしょ)、\n如飛虫堕処(にょひちゅうだしょ)\n受苦無有数量処(じゅくむうすうりょうしょ)\n屎泥処(しでいしょ)(に)、刀輪処(とうりんしょ)\n多苦処(たくしょ)(に)闇冥処(あんみゅうしょ)(に)極苦処(ごくくしょ)\n\n頞部陀(あぶだ)、刺部陀(にらぶだ)\n頞听陀(あただ)、臛臛婆(かかば)、虎虎婆(ここば)\n嗢鉢羅(うばら)、(に)、鉢特摩(はどま)(に)摩訶鉢特摩(まかはどま)\n\n衆病処(しゅうびょうしょ)、(ったら) 雨鉄処(うてつしょ)、(ったら)\n悪杖処(あくじょうしょ)、黒色鼠狼処(こくしょくそうろうしょ)、\n針山、血の池、まだまだ色々!\n\n地獄はあるかもしれないよ!!\nこの世の行い気をつけてー!\n\nここは地獄!地獄!素敵な地獄!\n地獄、じご、じご、じごくだよ~!!\n\nここは地獄!地獄!楽しい地獄!\n地獄、じご、じご、じご、じご、じご、\nじご、じご、じご、じご、じご、じごくだよ~!!\n\n嗚呼~ \n";

auto label = LabelTTF::create(string_txt, "Arial Rounded MT Bold", 15);
addChild(label);

f:id:raharu0425:20140512195915p:plain

まぁそりゃそうです

スクロールさせる

1
2
3
4
5
6
7
8
//Scrollview
auto *scroll = ScrollView::create(window_size);
scroll->setDirection(ScrollView::Direction::VERTICAL);
addChild(scroll);

//Label
auto label = LabelTTF::create(string_txt, "Arial Rounded MT Bold", 15);
scroll->setContainer(label);

scroll->setDirection(ScrollView::Direction::VERTICAL);
縦方向だけにスクロールさせてみます。

分かりづらいので割愛

画面の大きさに合わせて自動改行

1
2
3
4
5
6
7
8
9
10
11
//Scrollview
auto *scroll = ScrollView::create(window_size);
scroll->setDirection(ScrollView::Direction::VERTICAL);
addChild(scroll);

//Label
auto label = LabelTTF::create(string_txt, "Arial Rounded MT Bold", 15);

label->setDimensions(Size(window_size.width,0));
label->setDimensions(Size(label->getContentSize().width, label->getContentSize().height));
scroll->setContainer(label);

f:id:raharu0425:20140512201227p:plain

左寄せにする

1
2
3
4
5
6
7
8
9
10
11
12
//Scrollview
auto *scroll = ScrollView::create(window_size);
scroll->setDirection(ScrollView::Direction::VERTICAL);
addChild(scroll);

//Label
auto label = LabelTTF::create(string_txt, "Arial Rounded MT Bold", 15);

label->setDimensions(Size(window_size.width,0));
label->setDimensions(Size(label->getContentSize().width, label->getContentSize().height));
label->setHorizontalAlignment(TextHAlignment::LEFT);
scroll->setContainer(label);

f:id:raharu0425:20140512201458p:plain

文字の開始位置を画面の上に合わせる

現在のアンカーポイントが0,0左下にセットされている訳です。
大きいサイズの文字データの一番左上から表示させたいので、
widthは0
heightはコンテンツサイズから画面縦を引いた負数になります

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Scrollview
auto *scroll = ScrollView::create(window_size);
scroll->setDirection(ScrollView::Direction::VERTICAL);
addChild(scroll);

//Label
auto label = LabelTTF::create(string_txt, "Arial Rounded MT Bold", 15);

label->setDimensions(Size(window_size.width,0));
label->setDimensions(Size(label->getContentSize().width, label->getContentSize().height));
label->setHorizontalAlignment(TextHAlignment::LEFT);

scroll->setContainer(label);
scroll->setContentOffset(Point(0, 0 - (label->getContentSize().height - window_size.height)));

f:id:raharu0425:20140512202444p:plain

これで思い通りになりました。
スクロールコンテンツのサイズはsetContainerSizeでセット出来ます。