mieki256's diary



2018/07/03(火) [n年前の日記]

#1 [love2d] love2d上でビット演算

love2d上でビット演算する方法が少し分かってきたのでメモ。以下のやり取りが参考になった。

_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 フォルダ名
で、以下の画面が出る。はず。

love2d_bit_op_ss.gif

少し解説。 :

lua 5.2 以降の場合は、標準ライブラリに bit32 なるものが用意されているそうで。それを使ってビット演算ができる。
> 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)

以上です。

過去ログ表示

Prev - 2018/07 - 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