2020/01/04(土) [n年前の日記]
#1 [love2d] love2dでマウスボタンの状態を取得
love2d でマウスボタンの状態を取得したい。環境は Windows10 x64 1909 + love2d 11.3。
_love.mouse (日本語) - LOVE
_love.mouse.isDown (日本語) - LOVE
サンプルを書いてみた。こんな感じになった。

- マウス関係の情報は、love.mouse で取得できる模様。
- マウスボタンを押しているかどうかは、love.mouse.isDown() を使えばいいらしい。
- love.mouse.isDown() に、数値として、1〜3 を指定すれば、左ボタン or 右ボタン or 中ボタンの状態が true か false で返ってくる。
- 4 や 5 を指定すると、多ボタンマウスのボタン状態も取得できる、ように見える。手元の環境では取得できた。
_love.mouse (日本語) - LOVE
_love.mouse.isDown (日本語) - LOVE
サンプルを書いてみた。こんな感じになった。

◎ ソース。 :
_conf.lua
_main.lua
conf.lua と main.lua を任意のフォルダに入れて、「love フォルダ名」で実行できる。
function love.conf(t) t.version = "11.3" -- love2d version t.window.title = "Mouse button check - love2d" t.window.vsync = 1 t.window.width = 320 t.window.height = 240 -- t.window.fullscreen = true -- t.window.fullscreentype = "exclusive" end
_main.lua
-- Mouse button check on love2d
function love.load()
love.graphics.setDefaultFilter("nearest", "nearest")
font = love.graphics.newFont(16)
mx, my = 0, 0
buttons = {}
end
function love.update(dt)
mx, my = love.mouse.getPosition()
for i = 1, 5 do
-- 1:left button, 2:right button, 3:middle button
buttons[i] = love.mouse.isDown(i)
end
end
function love.draw()
love.graphics.clear(0.2, 0.4, 0.6, 1.0)
love.graphics.setFont(font)
love.graphics.setColor(1, 1, 1, 1)
local ty = 24
local t = "Mouse Position : ("
t = t .. tostring(mx) .. ","
t = t .. tostring(my) .. ")"
love.graphics.print(t, 2, ty)
ty = ty + 24
for i = 1, #buttons do
local t = "Button " .. tostring(i) .. " : "
t = t .. (buttons[i] and "ON" or "OFF")
-- if buttons[i] then
-- t = t .. "ON"
-- else
-- t = t .. "OFF"
-- end
love.graphics.print(t, 2, ty)
ty = ty + 24
end
love.graphics.print("FPS: " .. tostring(love.timer.getFPS()), 2, 2)
end
function love.keypressed(key, isrepeat)
if key == "escape" then
-- ESC key to exit
love.event.quit()
end
end
conf.lua と main.lua を任意のフォルダに入れて、「love フォルダ名」で実行できる。
◎ コールバック関数で処理。 :
マウスボタンが押された時や、離された時に呼ばれる関数を書いておくことでも、ボタンの状態を取得することができるらしい。
_love.mousepressed (日本語) - LOVE
_love.mousereleased (日本語) - LOVE
Wiki上に簡単なサンプルが載っている。ありがたや。参考にして、手元でも動作確認。
_conf.lua
_main.lua
この書き方でも、ちゃんと取得できてる。
_love.mousepressed (日本語) - LOVE
_love.mousereleased (日本語) - LOVE
Wiki上に簡単なサンプルが載っている。ありがたや。参考にして、手元でも動作確認。
_conf.lua
_main.lua
この書き方でも、ちゃんと取得できてる。
◎ マウスホイールの回転を取得。 :
マウスホイールが回されたかどうかは、love.wheelmoved() というコールバック関数を書くことで取得できるらしい。
_love.wheelmoved (日本語) - LOVE
サンプルを書いてみた。
_conf.lua
_main.lua

自分は横方向にホイールを倒せるマウスを持ってないので、それについては動作確認できなかったけど。上下方向へのマウスホイール回転については、たしかに取得できている模様。
_love.wheelmoved (日本語) - LOVE
サンプルを書いてみた。
_conf.lua
_main.lua

自分は横方向にホイールを倒せるマウスを持ってないので、それについては動作確認できなかったけど。上下方向へのマウスホイール回転については、たしかに取得できている模様。
◎ マウス関連常駐ツールを動かしていると反応が鈍い。 :
自分の環境では、マウスボタンの割り当てを変更できる常駐ツール、X-Mouse Button Control (XMBC) 2.18.8 を使って、多ボタンマウスの第4ボタンを中ボタン代わりにしているのだけど。
_X-Mouse Button Control (XMBC)
その状態で第4ボタンを押してみても、love2d 上では約1〜2秒ほど反応が遅れて、中ボタンが押された/離されたと判定するようで…。
どうやら、その手の常駐ツールを動かしてる環境では、love2d はマウスボタンの押し下げを即座に取得できない時もある、と思っておいたほうが良さそうだなと…。
_X-Mouse Button Control (XMBC)
その状態で第4ボタンを押してみても、love2d 上では約1〜2秒ほど反応が遅れて、中ボタンが押された/離されたと判定するようで…。
どうやら、その手の常駐ツールを動かしてる環境では、love2d はマウスボタンの押し下げを即座に取得できない時もある、と思っておいたほうが良さそうだなと…。
◎ Luaで三項演算子。 :
一応念のためにメモ。Lua で三項演算子っぽい書き方をしたい場合は、
_[lua] 三項演算子なんて飾りです! - Qiita
_Lua で3項演算子 - Qiita
_2項演算子を使った3項演算子風実装 - tattyu's blog
_空想具現化プログラミング Lua5.1.3 SJIS版の更新と三項演算子など
A and B or Cといった感じで書くらしい。A が成立した場合は B が返り、A が成立しない場合は C が返るのだとか。
_[lua] 三項演算子なんて飾りです! - Qiita
_Lua で3項演算子 - Qiita
_2項演算子を使った3項演算子風実装 - tattyu's blog
_空想具現化プログラミング Lua5.1.3 SJIS版の更新と三項演算子など
[ ツッコむ ]
以上、1 日分です。
