読者です 読者をやめる 読者になる 読者になる

たぶん週刊「今週の進捗」

1週間に勉強したことや実装したことをネタに、週に1回(主に土日に)更新していく予定です。「多分」なので、臨時休刊があってもご海容ください。

Siv3D で当たり判定

Siv3D

Siv3D の図形の、他の図形との当たり判定を検出するメソッドを使って何か書いてみたかった。

コード

# include <Siv3D.hpp>

void Main()
{
	ScreenCapture::BeginGIF();

	std::vector<Circle> bullet_vector;

	Rect target = Rect( 300, Random( 0, Window::Height()), 200, 200 );
	bool collided;

	while (System::Update())
	{
		collided = false;

		// クリックされたら弾を生成
		if (Input::MouseL.clicked)
		{
			bullet_vector.push_back( Circle( 0, Mouse::Pos().y, 25) );
		}

		for (unsigned int i = 0; i < bullet_vector.size(); i++){
			bullet_vector[i].draw(Palette::Gold);

			if (!collided&&bullet_vector[i].intersects(target))
				collided = true;

			bullet_vector[i].x += 3;

			// 中心のx座標が画面外に出たら削除
			if (bullet_vector[i].x>Window::Width())
				bullet_vector.erase(bullet_vector.begin() + i);
		}

		target.draw( collided ? Color( 255, 255, 255, 200) : Color( 255, 255, 255) );
	}
}

右へ移動する丸を画面上をクリックで生成して、白い四角と衝突したら半透明にするプログラム。

できたもの




何故かGIFアニメがうpできない(´・ω・`)
前はできてたのに。

余談

何もなければこれが今年最後の投稿ですね。
今年はよく更新したなぁと思ったら4月以前は全く投稿してなかった…。
来年は毎週更新できればいいなぁ。