コンテンツにスキップ

13. キーボード入力を扱う

キーボードの入力を調べる方法を学びます。

13.1 キーが押されたか調べる

if (キー名.down()) で、キーが押されたかを調べることができます。

主なキー名
  • A , B , C , ... は KeyA, KeyB, KeyC , ...
  • 1 , 2 , 3 , ... は Key1, Key2, Key3, ...
  • F1 , F2 , F3 , ... は KeyF1, KeyF2, KeyF3, ...
  • Up , Down , Left , RightKeyUp, KeyDown, KeyLeft, KeyRight
  • SpaceKeySpace
  • EnterKeyEnter
  • BackspaceKeyBackspace
  • Tab キーは KeyTab
  • Esc キーは KeyEscape
  • Page Up , Page DownKeyPageUp, KeyPageDown
  • Del キーは KeyDelete
  • Numpad の Num 0 , Num 1 , Num 2 , ... は KeyNum0, KeyNum1, KeyNum2, ...
  • ShiftKeyShift
  • Left Shift (左シフト), Right Shift (右シフト) は KeyLShift, KeyRShift
  • CtrlKeyControl
  • (macOS) CmdKeyCommand
  • , , . , / キーは KeyComma, KeyPeriod, KeySlash

# include <Siv3D.hpp>

void Main()
{
	Scene::SetBackground(ColorF{ 0.8, 0.9, 1.0 });

	while (System::Update())
	{
		// A キーが押されたら
		if (KeyA.down())
		{
			Print << U"A";
		}

		// スペースキーが押されたら
		if (KeySpace.down())
		{
			Print << U"Space";
		}

		// 1 キーが押されたら
		if (Key1.down())
		{
			Print << U"1";
		}	
	}
}

13.2 キーが押されているか調べる

if (キー名.pressed()) で、キーが押されているかを調べることができます。.down() は押された瞬間のみ、.pressed() は押されている間ずっと true になります。

# include <Siv3D.hpp>

void Main()
{
	Scene::SetBackground(ColorF{ 0.8, 0.9, 1.0 });

	while (System::Update())
	{
		// A キーが押されていたら
		if (KeyA.pressed())
		{
			Print << U"A";
		}

		// スペースキーが押されていたら
		if (KeySpace.pressed())
		{
			Print << U"Space";
		}

		// 1 キーが押されていたら
		if (Key1.pressed())
		{
			Print << U"1";
		}	
	}
}

13.3 キーで左右に移動する

矢印キーを使って絵文字を左右に移動させるには次のようにします。

# include <Siv3D.hpp>

void Main()
{
	Scene::SetBackground(ColorF{ 0.8, 0.9, 1.0 });

	const Texture emoji{ U"☃️"_emoji };

	// 移動の速さ(ピクセル / 秒)
	const double speed = 200;

	double x = 400;

	while (System::Update())
	{
		const double deltaTime = Scene::DeltaTime();

		// ← キーが押されていたら
		if (KeyLeft.pressed())
		{
			x -= (speed * deltaTime);
		}

		// → キーが押されていたら
		if (KeyRight.pressed())
		{
			x += (speed * deltaTime);
		}

		emoji.drawAt(x, 300);
	}
}

13.4 キーで上下左右に移動する

矢印キーを使って絵文字を上下左右に移動させるには次のようにします。x, y の 2 つの変数を使う代わりに Vec2 型の変数を使います。

# include <Siv3D.hpp>

void Main()
{
	Scene::SetBackground(ColorF{ 0.8, 0.9, 1.0 });

	const Texture emoji{ U"☃️"_emoji };

	// 移動の速さ(ピクセル / 秒)
	const double speed = 200;

	Vec2 pos{ 400, 300 };

	while (System::Update())
	{
		const double deltaTime = Scene::DeltaTime();

		// ← キーが押されていたら
		if (KeyLeft.pressed())
		{
			pos.x -= (speed * deltaTime);
		}

		// → キーが押されていたら
		if (KeyRight.pressed())
		{
			pos.x += (speed * deltaTime);
		}

		// ↑ キーが押されていたら
		if (KeyUp.pressed())
		{
			pos.y -= (speed * deltaTime);
		}

		// ↓ キーが押されていたら
		if (KeyDown.pressed())
		{
			pos.y += (speed * deltaTime);
		}

		emoji.drawAt(pos);
	}
}

振り返りチェックリスト

  • キーが押されたか調べるには if (キー名.down()) を使うことを学んだ
  • キーが押されているか調べるには if (キー名.pressed()) を使うことを学んだ