mieki256's diary



2020/01/04() [n年前の日記]

#1 [love2d] love2dでマウスボタンの状態を取得

love2d でマウスボタンの状態を取得したい。環境は Windows10 x64 1909 + love2d 11.3。


_love.mouse (日本語) - LOVE
_love.mouse.isDown (日本語) - LOVE

サンプルを書いてみた。こんな感じになった。

love2d_mousebutton_ss01.gif

ソース。 :

_conf.lua
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

love2d_mouse_callback_ss01.gif

この書き方でも、ちゃんと取得できてる。

マウスホイールの回転を取得。 :

マウスホイールが回されたかどうかは、love.wheelmoved() というコールバック関数を書くことで取得できるらしい。

_love.wheelmoved (日本語) - LOVE

サンプルを書いてみた。

_conf.lua
_main.lua

love2d_mouse_wheel_ss01.gif

自分は横方向にホイールを倒せるマウスを持ってないので、それについては動作確認できなかったけど。上下方向へのマウスホイール回転については、たしかに取得できている模様。

マウス関連常駐ツールを動かしていると反応が鈍い。 :

自分の環境では、マウスボタンの割り当てを変更できる常駐ツール、X-Mouse Button Control (XMBC) 2.18.8 を使って、多ボタンマウスの第4ボタンを中ボタン代わりにしているのだけど。

_X-Mouse Button Control (XMBC)

その状態で第4ボタンを押してみても、love2d 上では約1〜2秒ほど反応が遅れて、中ボタンが押された/離されたと判定するようで…。

どうやら、その手の常駐ツールを動かしてる環境では、love2d はマウスボタンの押し下げを即座に取得できない時もある、と思っておいたほうが良さそうだなと…。

Luaで三項演算子。 :

一応念のためにメモ。Lua で三項演算子っぽい書き方をしたい場合は、
A and B or C
といった感じで書くらしい。A が成立した場合は B が返り、A が成立しない場合は C が返るのだとか。

_[lua] 三項演算子なんて飾りです! - Qiita
_Lua で3項演算子 - Qiita
_2項演算子を使った3項演算子風実装 - tattyu's blog
_空想具現化プログラミング Lua5.1.3 SJIS版の更新と三項演算子など

以上、1 日分です。

過去ログ表示

Prev - 2020/01 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project