複数アイテムを表示&出現から数秒経つと消えるプログラム
えべ  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())
{

}
}
編集
えべ  2016/02/12(Fri) 20:31
ありがとうございます!こういう書き方があったのですね。

ありがたく参考にさせて頂きます。
編集
件名
Re: 複数アイテムを表示&出現から数秒経つと消えるプログラム
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -