複数アイテムを表示&出現から数秒経つと消えるプログラム
えべ 2016/02/11(Thu) 11:30
現在、私は画面上にランダムの位置に出現する複数の敵を倒すゲームを作っています。
Siv3D-Referenceを参考に、
Array <Vec2> points;
という Vec2 を使った配列を作り、
points.push_back(RandomVec2({ 30, 570 }, { 100, 400 }) );
XとYの数値を設定するプログラムまでは作る事が出来ました。
しかし、出現した敵に体力の変数を設定し、攻撃した敵の体力を減らし
0になった敵を消すプログラムを作るにはどうすれば良いでしょうか?
解決方法を教えていただけると助かります。
もし良ければ、よろしくお願いいたします。
ちなみに、殆ど省いてありますが、
全体的なプログラムの流れはこの様になっています。
void update() override
{
for (auto& point : points)
{
RectF(30, 30).setCenter(point)(Itexture(0, 0, 30, 30)).draw();
}
//触った時
for (auto it = points.begin(); it != points.end(); ++it)
{
//触った時の処理など
}
if (Tim > 60) {
points.push_back(RandomVec2({ 30, 570 }, { 100, 400 }) );
Tim=0;
}
Tim++;
}
Reputeless 2016/02/11(Thu) 13:28
Vec2 の Array ではなく、座標や HP などさまざまな情報を持つ構造体の Array にします。
Erase_if() を使うと、指定した条件の要素を Array から削除できます。
# include <Siv3D.hpp>
struct Monster
{
Monster() = default;
Monster(const String& _name, int _hp, const Point& _pos)
: name(_name)
, hp(_hp)
, pos(_pos) {}
String name;
int hp;
Point pos;
};
void Main()
{
Array<Monster> monsters;
monsters.emplace_back(L"Dog", 20, Point(20, 50));
monsters.emplace_back(L"Cat", 0, Point(70, 30));
monsters.emplace_back(L"Lion", 10, Point(120, 50));
Erase_if(monsters, [](const Monster& m) { return m.hp <= 0; });
for (const auto& monster : monsters)
{
Println(L"{} | hp: {}, pos : {}"_fmt, monster.name, monster.hp, monster.pos);
}
while (System::Update())
{
}
}