見た目は変わらないんですが。
前回のままだといろいろ扱いづらいので、左のウィンドウをクラス化しました。
そして、今回は、前回と同じように表示できるところまで作成しました。
このウィンドウをタップすると、画面中央に詳細が表示されるような動きにしたいと思っています。
//
// Created by ntaki on 2020/12/12.
//
#ifndef PROJ_ANDROID_CHARAWINDOW_H
#define PROJ_ANDROID_CHARAWINDOW_H
#include "cocos2d.h"
#include "GameStatusData/Character.h"
class CharaWindow {
private:
cocos2d::Vec2 point;
cocos2d::Size size;
cocos2d::Sprite* sprite;
cocos2d::Label* hpLabel;
cocos2d::Label* MpLabel;
public:
CharaWindow();
~CharaWindow();
void show(cocos2d::Scene* scene);
void hide(cocos2d::Scene* scene);
cocos2d::Size getSpriteContentSize();
cocos2d::Vec2 getPosition();
cocos2d::Size getSize();
void setPosition(cocos2d::Vec2 vector);
void setScale(float rate);
void setParameter(Character* chara);
bool isTouch(cocos2d::Vec2 vector);
};
#endif //PROJ_ANDROID_CHARAWINDOW_H
//
// Created by ntaki on 2020/12/12.
//
#include "CharaWindow.h"
CharaWindow::CharaWindow()
{
sprite = cocos2d::Sprite::create("btn02_03_s_bl.png");
if (sprite != nullptr)
{
sprite->setAnchorPoint(cocos2d::Vec2(0,0));
auto offset = sprite->getContentSize().width / 10.0;
hpLabel = cocos2d::Label::createWithTTF("Hello World", "fonts/msgothic.ttc", 6);
if(hpLabel != nullptr)
{
hpLabel->setAnchorPoint(cocos2d::Vec2(0, 1));
hpLabel->setPosition(cocos2d::Vec2(0, sprite->getContentSize().height));
sprite->addChild(hpLabel);
}
MpLabel = cocos2d::Label::createWithTTF("Hello World", "fonts/msgothic.ttc", 6);
if(MpLabel != nullptr)
{
MpLabel->setAnchorPoint(cocos2d::Vec2(0, 1));
MpLabel->setPosition(cocos2d::Vec2(0, sprite->getContentSize().height - 1 * hpLabel->getContentSize().height));
sprite->addChild(MpLabel);
}
}
}
CharaWindow::~CharaWindow()
{
}
void CharaWindow::setPosition(cocos2d::Vec2 vector)
{
if (sprite != nullptr)
{
point = vector;
sprite->setPosition(point);
}
}
void CharaWindow::setScale(float rate)
{
if (sprite != nullptr)
{
sprite->setScale(rate);
size = cocos2d::Size(sprite->getContentSize().width * rate, sprite->getContentSize().height * rate);
}
}
void CharaWindow::show(cocos2d::Scene* scene)
{
if (sprite != nullptr && scene != nullptr)
{
scene->addChild(sprite, 1);
}
}
void CharaWindow::hide(cocos2d::Scene *scene)
{
if (sprite != nullptr && scene != nullptr)
{
scene->removeChild(sprite, false);
}
}
cocos2d::Vec2 CharaWindow::getPosition()
{
return point;
}
cocos2d::Size CharaWindow::getSize()
{
return size;
}
cocos2d::Size CharaWindow::getSpriteContentSize()
{
if (sprite != nullptr)
{
return sprite->getContentSize();
}
}
void CharaWindow::setParameter(Character* chara)
{
auto hpStr = cocos2d::String();
hpStr.appendWithFormat("HP : %d", chara->MaxHp);
hpLabel->setString(hpStr.getCString());
auto mpStr = cocos2d::String();
mpStr.appendWithFormat("MP : %d", chara->MaxMp);
MpLabel->setString(mpStr.getCString());
}
bool CharaWindow::isTouch(cocos2d::Vec2 vector)
{
return false;
}
CharaWindow* window[4];
auto chara = GameStatus::GetGameData()->Charactors->begin();
for(int i = 0; i < 4; i++) {
window[i] = new CharaWindow();
window[i]->setParameter(chara.operator*());
window[i]->setScale((visibleSize.height / 4) / window[i]->getSpriteContentSize().height);
window[i]->setPosition(Vec2(xpos + origin.x, origin.y + window[i]->getSize().height * i));
window[i]->show(this);
chara++;
}
クラス化させることで、ウィンドウ表示処理がかなりスッキリしました。
このクラスの中で使用しているオブジェクトはnewで作成した物ではないので、cocos-2dx内部で適時ガベージコレクションされるでしょう。
「【COCOS2D-X】ステータスウィンドウをクラス化」への1件のフィードバック