コンテンツにスキップ

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

8.1 キーボードが押されたか調べる

  • キー名.down() で、あるキーが押されたかを調べられます
キー名
  • A, B, C, ... は KeyA, KeyB, KeyC , ...
  • 1, 2, 3, ... は Key1, Key2, Key3, ...
  • F1, F2, F3, ... は KeyF1, KeyF2, KeyF3, ...
  • ↑, ↓, ←, → は KeyUp, KeyDown, KeyLeft, KeyRight
  • スペースキーは KeySpace
  • エンターキーは KeyEnter
  • バックスペースキーは KeyBackspace
  • Tab キーは KeyTab
  • Esc キーは KeyEscape
  • PageUp, PageDown は KeyPageUp, KeyPageDown
  • Delete キーは KeyDelete
  • Numpad の 0, 1, 2, ... は KeyNum0, KeyNum1, KeyNum2, ...
  • シフトキーは KeyShift
  • 左シフトキー、右シフトキーは KeyLShift, KeyRShift
  • コントロールキーは KeyControl
  • (macOS) コマンドキーは KeyCommand
  • 「,」「.」「/」キーは 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";
		}	
	}
}

8.2 キーボードが押されているか調べる

  • キー名.pressed() で、あるキーが押されているかを調べられます

# 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";
		}	
	}
}

8.3 キーボードで左右に移動する

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

# include <Siv3D.hpp>

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

	Texture emoji{ U"☃️"_emoji };

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

	double x = 400.0;

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

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

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

		emoji.drawAt(x, 300);
	}
}
上下左右に移動するサンプル(開く前に考えてみよう)
# include <Siv3D.hpp>

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

	Texture emoji{ U"☃️"_emoji };

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

	double x = 400.0;

	double y = 300.0;

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

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

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

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

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

		emoji.drawAt(x, 300);
	}
}