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 日分です。