Playdateには加速度センサーもついています。
今回は加速度センサーを使ったサンプルを作成してみました。
ベースとなるプロジェクトはこちら。
main.lua
import "CoreLibs/object"
import "CoreLibs/graphics"
import "CoreLibs/sprites"
import "CoreLibs/timer"
local gfx <const> = playdate.graphics
local playerSprite = nil
local status = "ACCELEROMETER\nOFF"
function myGameSetUp()
local playerImage = gfx.image.new("Images/playerImage")
assert( playerImage )
playerSprite = gfx.sprite.new( playerImage )
playerSprite:moveTo( 200, 120 )
playerSprite:add()
local backgroundImage = gfx.image.new( "Images/background" )
assert( backgroundImage )
gfx.sprite.setBackgroundDrawingCallback(
function( x, y, width, height )
backgroundImage:draw( 0, 0 )
gfx.setImageDrawMode(gfx.kDrawModeFillWhite)
gfx.drawText(status, 20, 20)
gfx.setImageDrawMode(gfx.kDrawModeCopy)
end
)
end
myGameSetUp()
function playdate.update()
-- Aボタン: 加速度センサーをON/OFF
if playdate.buttonJustReleased( playdate.kButtonA ) then
if playdate.accelerometerIsRunning() ~= true then
playdate.startAccelerometer()
status = "ACCELEROMETER\nON"
gfx.sprite.redrawBackground()
else
playdate.stopAccelerometer()
status = "ACCELEROMETER\nOFF"
gfx.sprite.redrawBackground()
end
end
-- 加速度センサー
if playdate.accelerometerIsRunning() == true then
local x, y, z = playdate.readAccelerometer()
playerSprite:moveBy( x, y )
end
gfx.sprite.update()
playdate.timer.updateTimers()
end
加速度センサーはバッテリー節約のため、最初はオフにされています。
加速度センサーを開始するにはplaydate.startAccelerometer()
で明示的にオンにする必要があります。
playdate.accelerometerIsRunning()
で加速度センサーの有効無効状態をbooleanで取得します。
加速度センサーを終了するにはplaydate.stopAccelerometer()
でオフできます。
加速度センサーによって傾きを取得するにはplaydate.readAccelerometer()
を使います。
返り値はx``y``z
となり、0〜1
の範囲で取得することができます。
端末の背中(スクリーンの裏側)を床に置くと(x,y,z)は(0,0,1)となり、端末を立てる(ロックボタンを上側にする)と(x,y,z)は(0,1,0)と値が返されます。
今回はx
とy
をそのまま代入して、スプライトを動かしています。