LoginSignup
1
0

More than 1 year has passed since last update.

【Playdate】入力ハンドラを使う

Posted at

Playdate には playdate.InputHandlers オブジェクトを使うことでキー入力の制御をまとめて管理することができます。
例えばフィールド画面では十字キー操作でプレイヤーを移動するように、メニュー画面ではメニューUIの操作をするように InputHandler オブジェクトを切り替えるといった感じです。

こちらの記事main.luaのplaydate.update内のキー入力をInputHandlerに変更してみます。

main.lua
import "CoreLibs/object"
import "CoreLibs/graphics"
import "CoreLibs/sprites"
import "CoreLibs/timer"

local gfx <const> = playdate.graphics

local playerSprite = nil

local playerMoveX = 0 -- playerのX移動距離
local playerMoveY = 0 -- playerのY移動距離

-- 入力ハンドラオブジェクト
local myInputHandlers = {
	upButtonDown = function()
		playerMoveY = -2
	end,
	upButtonUp = function()
		playerMoveY = 0
	end,
	
	rightButtonDown = function()
		playerMoveX = 2
	end,
	rightButtonUp = function()
		playerMoveX = 0
	end,
	
	downButtonDown = function ()
		playerMoveY = 2
	end,
	downButtonUp = function ()
		playerMoveY = 0
	end,
	
	leftButtonDown = function ()
		playerMoveX = -2
	end,
	leftButtonUp = function ()
		playerMoveX = 0
	end,
}

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 )

    playdate.inputHandlers.push(myInputHandlers) -- 入力ハンドラを追加

    gfx.sprite.setBackgroundDrawingCallback(
        function( x, y, width, height )
            backgroundImage:draw( 0, 0 )
        end
    )

end

myGameSetUp()

function playdate.update()

    playerSprite:moveBy( playerMoveX, playerMoveY ) -- playerを移動

    gfx.sprite.update()
    playdate.timer.updateTimers()

end

InputHandlersオブジェクト内で使える関数は以下が扱えます。

  • AButtonDown()
  • AButtonHeld() ※Aボタンを一秒間押したあとに実行される
  • AButtonUp()
  • BButtonDown()
  • BButtonHeld() ※Bボタンを一秒間押したあとに実行される
  • BButtonUp()
  • downButtonDown()
  • downButtonUp()
  • leftButtonDown()
  • leftButtonUp()
  • rightButtonDown()
  • rightButtonUp()
  • upButtonDown()
  • upButtonUp()
  • cranked(change, acceleratedChange)
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0