ペンタブレット - Siv3D/Reference-JP GitHub Wiki

タッチと座標

マウスと共通です。

# include <Siv3D.hpp>

void Main()
{
	while(System::Update())
	{
		// タッチはマウスの左ボタンのと共通
		if(Input::MouseL.pressed)
		{
			// 座標はマウス座標と共通
			Circle(Mouse::Pos(),100).draw();
		}
	}
}

ペンの傾きと回転

# include <Siv3D.hpp>

void Main()
{
	const Font font(30);

	const Texture texture(L"Example/Windmill.png");

	while (System::Update())
	{
		// 地面に対する傾き(ペンが直立していると 90)
		const int32 xz = Pentablet::DegreeXZ();

		// 垂直な軸に対する回転角度(時計回りで 0 から 360)
		const int32 y = Pentablet::DegreeY();

		texture.rotate(Radians(1.0*y)).draw();

		font(xz, L',', y).draw();
	}
}

筆圧

# include <Siv3D.hpp>

void Main()
{
	const Font font(30);

	if (!Pentablet::SupportsPressure())
	{
		return; // 筆圧測定に対応していない
	}

	while (System::Update())
	{
		// 筆圧 [0.0-1.0]
		const double pressure = Pentablet::Pressure();

		// 筆圧に応じて円の大きさを変える
		Circle(Mouse::Pos(), pressure * 200).draw(Palette::Skyblue);

		font(pressure).draw();
	}
}

ペンタブを使ったゲーム

# include <Siv3D.hpp>

Circle CreateCircle()
{
	return{ RandomVec2({ 80, 560 }, { 80, 400 }), Random(10.0, 80.0) };
}

void Main()
{
	const Sound sound(L"Example/Sound.mp3");

	const Font font(30);

	if (!Pentablet::SupportsPressure())
	{
		return;
	}

	Circle innerCircle = CreateCircle();

	const int32 maxCount = 15;

	int32 count = 0;

	while (System::Update())
	{
		const Circle outerCircle = innerCircle.stretched(20.0);

		const double pressure = Pentablet::Pressure()*100.0;

		const Circle pressureCircle(Mouse::Pos(), pressure);

		if (pressureCircle.contains(innerCircle)
			&& outerCircle.contains(pressureCircle))
		{
			++count;
		}
		else
		{
			count = 0;
		}

		if (count == maxCount)
		{
			count = 0;

			sound.playMulti();

			innerCircle = CreateCircle();
		}

		innerCircle.drawFrame(1.0, 1.0);

		outerCircle.drawFrame(1.0, 1.0);

		pressureCircle.drawFrame(1.0, 1.0, Palette::Skyblue);

		pressureCircle.drawPie(0.0, TwoPi / maxCount*count, Palette::Skyblue);
	}
}
⚠️ **GitHub.com Fallback** ⚠️