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

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

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

プロつく計画1-2:1週目

プロつく計画1のリファクタリング記事タイトルの表記が統一されていない問題。
とりあえず「プロつく計画1-(Issue番号):w週目」とでもしておこう。
Issue番号1は…新バージョンのライブラリへの移行ということで。

さて、Issue番号2はブロックのアニメーションの実装です。
今の段階だとブロックを消したら
即座に上に積まれているブロックが下に落とされるようになっているので、
その途中のアニメーションを作ろうと思いました。

f:id:ZeitungM:20160320224856g:plain

テストとして作ったのがこれ。
gifアニメで出力するとコマ送りっぽくなるけど、実際はもうちょっと滑らかです。

// クリックすると縮小していって1秒後に消える四角形
# include <Siv3D.hpp>

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

	const Font font(30);

	// 縮小描画用のタイマ
	Stopwatch stopwatch;

	int rect_size = 100;

	Rect rect = Rect(rect_size, rect_size);
	// Rect の大きさが決まらないと中心も決まらない
	rect.setCenter(Window::Width() / 2, Window::Height() / 2);

	while (System::Update())
	{
		// クリックされたらタイマをスタート
		if (Input::MouseL.clicked)
			stopwatch.start();

		// 新しく四角形のサイズを計算
		// 時間が経つほど線形に小さくなり、1000ms後に0になる
		int rect_new_size = rect_size - rect_size*stopwatch.ms()/1000 ;
		if (rect_new_size > 0)
		{
			rect.setSize(rect_new_size, rect_new_size);
			rect.setCenter(Window::Width() / 2, Window::Height() / 2);
			rect.draw(Palette::Turquoise);
		}

		font(stopwatch.ms(), L"ミリ秒経過").draw(0, 400);
	}
}

メモ

Android の方はもうあんまり細かいところに突っ込まないで、
今はおまじないってことでいいんじゃないかな、と思うようになってきた。

ああでも、.xml ファイルの解読はもうちょっと詳しくやっておきたいな…