LoginSignup
2
1

More than 1 year has passed since last update.

Cocos Studio v3.x ListViewにPartsNodeを動的に追加してみる

Last updated at Posted at 2016-02-19

Cococs StudioでListViewを設定したBaseNodeとパーツ部分になるPartsNodeを作成。
ListViewにPartsNodeを追加していって、さくっとGridView的なものを作る備忘録。

Cocos Studio側の作業は割愛。
##作りたいモノ

  • 1行にボタン3つ
  • スクロールして欲しい

完成イメージ↓
listView1.png

###実装

Main.cpp
//BaseNodeを読み込む
auto baseNode = CSLoader::createNode("BaseNode.csb");
baseNode->setPosition(Vec2(origin.x + visibleSize.width/2, 0));

//ListViewを準備
auto listView = itemNode->getChildByName<ui::ListView*>("ItemList");

//PartsNodeを追加
for (int i = 0; i < 6 ; i++) {
    //Partsの読み込み
    auto listPartsNode = CSLoader::createNode("Parts.csb");

    //スクロールを有効化するためにPartsをLayoutとして取得
    auto panelLayout = listPartsNode->getChildByName<ui::Layout*>("Parts");
    //PartsNodeを一度削除
    listPartsNode->removeChild(panelLayout, true);

    //Parts内の要素を諸々設定
    auto item = utils::findChildren(*panelLayout, "//Button_0");
    auto itemBtn = (Button*)item.front();
    itemBtn->setTag(0);
    itemBtn->setOpacity(255);
    itemBtn->addTouchEventListener(this,toucheventselector(Main::onTouchButton));

    //PartsをListViewに追加
    listView->addChild(panelLayout);
}

addChild(itemNode);

「pushBackCustomItem」での実装だとスクロールが右端の限られた部分でしかできず、
かつ、PartsNode内に設置しているボタンが押せなくて断念。
おそらく、普通のリストであればこれで問題なかったはず。

今回はどうしてもグリッド的に表示したかったので(GridViewの方法が分からず……)、
この様な形で再現。

参考:
CocosStudioのUIEditorで作ったListViewを使う
[Cocos2dx] ui::ListView 備忘録

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1