https://github.com/takishita2nd/cocos2d-x_sample
こんなかんじになりました。
今回はスクロール処理にもう少し手を加えて、
スクロールしすぎないようにストッパ処理を追加しました。
if(questListMenu.isShow)
{
// Yの差分だけメニューを動かす
float divY = touch->getLocation().y - keepPosition.y;
auto visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
if(questListMenu.questListMenu[0].parts.point.y - questListMenu.questListMenu[0].parts.size.height + divY < visibleSize.height)
{
for(int i = 0; i < QUEST_NUM; i++)
{
questListMenu.questListMenu[i].parts.point = Vec2(questListMenu.parts.point.x, questListMenu.parts.point.y - questListMenu.questListMenu->parts.sprite->getContentSize().height * (i + 1));
questListMenu.questListMenu[i].parts.sprite->setPosition(questListMenu.questListMenu[i].parts.point);
questListMenu.questListMenu[i].questName.point = Vec2(questListMenu.questListMenu[i].parts.point.x + questListMenu.questListMenu[i].parts.size.width / 30.0, questListMenu.questListMenu[i].parts.point.y);
questListMenu.questListMenu[i].questName.label->setPosition(questListMenu.questListMenu[i].questName.point);
}
}
else if(questListMenu.questListMenu[QUEST_NUM - 1].parts.point.y + divY >= origin.y)
{
int listcount = 0;
for(int i = QUEST_NUM - 1; i <= 0; i--)
{
questListMenu.questListMenu[QUEST_NUM - 1].parts.sprite->setPosition(questListMenu.questListMenu[i].parts.point.x, questListMenu.questListMenu[0].parts.point.y * listcount + origin.y);
questListMenu.questListMenu[QUEST_NUM - 1].parts.point.y = questListMenu.questListMenu[0].parts.point.y * listcount + origin.y;
questListMenu.questListMenu[QUEST_NUM - 1].questName.label->setPosition(questListMenu.questListMenu[i].questName.point.x, questListMenu.questListMenu[0].parts.point.y * listcount + origin.y);
questListMenu.questListMenu[QUEST_NUM - 1].questName.point.y = questListMenu.questListMenu[0].parts.point.y * listcount + origin.y;
listcount++;
}
}
else
{
for(int i = 0; i < QUEST_NUM; i++)
{
questListMenu.questListMenu[i].parts.sprite->setPosition(questListMenu.questListMenu[i].parts.point.x, questListMenu.questListMenu[i].parts.point.y + divY);
questListMenu.questListMenu[i].parts.point.y = questListMenu.questListMenu[i].parts.point.y + divY;
questListMenu.questListMenu[i].questName.label->setPosition(questListMenu.questListMenu[i].questName.point.x, questListMenu.questListMenu[i].questName.point.y + divY);
questListMenu.questListMenu[i].questName.point.y = questListMenu.questListMenu[i].questName.point.y + divY;
}
}
keepPosition.y += divY;
}
考え方としては、
リストの先頭が画面上部のサイズから下に移動しそうなときは初期位置に設定する、
リストの最後が画面の下から上にいs¥どうしそうなときは下からリストを並べる、
といった感じです。
じゃあ、次はタップで選択処理だな。