Ibotenic by t-sin


われわれが必要なすべてはLOVE

プログラミング Lua ゲーム ゲームエンジン 自作

2021-05-28T09:43:26.014764+09:00

LOVEというLuaで書けるゲームエンジンの紹介です。

愛をみつけてしまった

近ごろ、かわいいゲームエンジンを見つけてしまってLuaにハマっています。そのゲームエンジンはLÖVEという名前のエンジンで、なぜかわいいのかは公式ウェブサイトを見るとわかります。

LÖVE - Free 2D Game Engine

ポップでかわいらしいデザインのウェブサイトで、その見た目にノックアウトされて触ってみるとかなり高速でいい感じです。特徴を上げておくと

という感じです。SDLの上につくられており、薄いゲームエンジンといった風情のようです。

コードはどんな感じ?

こんな感じのパーリンノイズ可視化が以下のように書けます。

function love.load()
    z = 0
end

function love.update()
    z = z + 0.01
end

function love.draw()
    love.graphics.clear(0.08, 0.03, 0.084)
    love.graphics.setBlendMode("add")
    love.graphics.setColor(0.4, 0.5, 0.8, 1)
    for y = 0, love.graphics.getPixelHeight(), 30 do
        for x = 0, love.graphics.getPixelWidth(), 30 do
            n = love.math.noise(x / 100 , y / 100, z)
            r = n * n * 30 + 1
            love.graphics.circle("line", x, y, r)
        end
    end
end

ここではloveモジュールが提供するコールバック関数を3つオーバーライドしています。なんとなく想像がつくと思いますが、love.load()は起動したとき1回だけ実行され主に状態初期化やリソース読み込みなどに理想します。love.update()は状態の更新を行うためのものです。love.draw()は状態を利用して画面に描画するためのコールバック関数です。

ところでこの可視化のプログラム、以前ジェネラティブアートとして書いたものの焼き直しなのです。

そう、そうなんです。

ゲームエンジンってジェネラティブアートにも向いてるんですね(学び)。

ちなみに同じことをQuil (ProcessingのClojureラッパーライブラリ) でやるとけっこうもたつくのですが、LOVEなら60fpsでぬるぬる動きます。ProcessingやQuilではアニメーション関連はオブジェクト数が多くなると重くなってくるのであまり気軽には試せなかったんですが、これならほんとうに気軽にアニメーションできてよいです。好き。Common Lispにこのレベルのライブラリがほしくなってしまいます。

lua-modeがほしい…

ちなみにふだん使いのテキストエディタはCommon Lisp製のLemなのですが、これにはまだlua-modeが存在しないので、fundamental-modeでコードを書いています。つらい。せめてシンタックスハイライトとオートインデントがほしい。

なので、どこかでlua-modeを書いてpull requestをださねばならない。

今後どうするの?

これだけ気軽にできるなら、ということでスケッチを溜めていくためのリポジトリをつくりました。

t-sin/love-sketches

いまは簡易クリックゲーム的なものをつくろうとして四苦八苦しています。これ以降も、ジェネラティブアートっぽいことや、ゲーーム的なものなどをスケッチしていろいろ試してみようと思います。

LOVEというLuaで書けるゲームエンジンの紹介です。

タグ: プログラミング , Lua , ゲーム , ゲームエンジン , 自作

作成日時: 2021-05-28T09:43:26.014764+09:00

更新日時: -