2018/07/03(火) [n年前の日記]
#1 [love2d] love2d上でビット演算
love2d上でビット演算する方法が少し分かってきたのでメモ。以下のやり取りが参考になった。
_Lua version - LOVE
以下のソースで動作確認してみたり。環境は Windows10 x64 + love2d 11.1。
_main.lua
_conf.lua
実行の仕方は、任意のフォルダに main.lua と conf.lua を入れて、
_Lua version - LOVE
以下のソースで動作確認してみたり。環境は Windows10 x64 + love2d 11.1。
_main.lua
-- love2d bit operation test bit = require("bit") function love.load() tm = 0 v = 0 end function love.update(dt) tm = tm + dt local st = 0.2 if tm >= st then tm = tm - st v = bit.band(v + 1, 0x0f) end end function love.draw() love.graphics.clear(0, 0.25, 0.5, 1.0) local s = "" for i=0,3 do local msk = bit.lshift(1, i) if bit.band(v, msk) == 0 then s = "0"..s else s = "1"..s end end love.graphics.print(s, 10, 40) end function love.keypressed(key, isrepeat) if key == "escape" then -- ESC to exit love.event.quit() end end
_conf.lua
function love.conf(t) t.window.title = "Bit operation test - love2d" t.window.vsync = true t.window.width = 320 t.window.height = 240 -- t.window.fullscreen = true -- t.window.fullscreentype = "exclusive" end
実行の仕方は、任意のフォルダに main.lua と conf.lua を入れて、
love フォルダ名で、以下の画面が出る。はず。
◎ 少し解説。 :
lua 5.2 以降の場合は、標準ライブラリに bit32 なるものが用意されているそうで。それを使ってビット演算ができる。
love2d 11.1 の場合は、require("bit") とやらで同等の処理ができるようになるらしい。
どんなメソッドがあるのかについては、おそらく以下のページが参考になりそう。
_BitOp - API Functions
_lua-users wiki: Bitwise Operators
よく使いそうなのは、以下だろうか…。
> lua -i Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio > bit32.band(7, 3) 3 > bit32.bor(1, 4) 5 > bit32.lshift(8, 1) 16 > bit32.rshift(8, 1) 4
love2d 11.1 の場合は、require("bit") とやらで同等の処理ができるようになるらしい。
local bit = require("bit") local a = bit.band(7, 3)
どんなメソッドがあるのかについては、おそらく以下のページが参考になりそう。
_BitOp - API Functions
_lua-users wiki: Bitwise Operators
よく使いそうなのは、以下だろうか…。
- AND : bit.band(x1, x2)
- OR : bit.bor(x1, x2)
- XOR : bit.bxor(x1, x2)
- NOT : bit.bnot(x)
- left shift : bit.lshift(x, n)
- right shift : bit.rshift(x, n)
- left rotate : bit.rol(x, n)
- right rotate : bit.ror(x, n)
[ ツッコむ ]
以上です。