2017/10/31(火) [n年前の日記]
#1 [love2d][lua] love2dを勉強中
とりあえず Windows10 x64上でlove2dを勉強中。
love2dは、lua言語からSDL2を利用して2Dゲームを制作できるライブラリ、という説明でいいのかな…?
_LOVE - Free 2D Game Engine
love2dは、lua言語からSDL2を利用して2Dゲームを制作できるライブラリ、という説明でいいのかな…?
_LOVE - Free 2D Game Engine
◎ 画像をキー入力で動かすサンプル。 :
◎ ソースと画像。 :
使用画像は以下。License : CC0 ってことで。
_bg_1280x720.png
_spaceship_001_64x64.png
ソースは以下。
_main.lua
_conf.lua
_bg_1280x720.png
_spaceship_001_64x64.png
ソースは以下。
_main.lua
-- sprite move example function love.load() -- init -- get window width and height scrw = love.graphics.getWidth() scrh = love.graphics.getHeight() -- load image bgimg = love.graphics.newImage("bg_1280x720.png") playerimg = love.graphics.newImage("spaceship_001_64x64.png") -- player work player = {} player.x = scrw / 2 player.y = scrh / 2 player.speed = 300 end function love.update(dt) -- update -- key check if love.keyboard.isDown("left") then player.x = player.x - player.speed * dt elseif love.keyboard.isDown("right") then player.x = player.x + player.speed * dt end if love.keyboard.isDown("up") then player.y = player.y - player.speed * dt elseif love.keyboard.isDown("down") then player.y = player.y + player.speed * dt end end function love.draw() -- draw BG love.graphics.setColor(255, 255, 255, 255) love.graphics.draw(bgimg, 0, 0) -- love.graphics.rectangle("fill", 0, 465, scrw, 150) love.graphics.setColor(255, 255, 255, 255) -- draw player ofsx = playerimg:getWidth() / 2 ofsy = playerimg:getHeight() / 2 love.graphics.draw(playerimg, player.x - ofsx, player.y - ofsy) love.graphics.print("FPS: "..tostring(love.timer.getFPS()), 10, 10) end function love.keypressed(key, isrepeat) -- ESC to exit if key == "escape" then love.event.quit() end end
_conf.lua
function love.conf(t) t.window.width = 1280 t.window.height = 720 t.window.title = "Move Sprite Example" t.window.fullscreen = false -- t.window.fullscreentype = "exclusive" t.window.vsync = true end
◎ 実行方法。 :
実行方法は、何か適当な名前でフォルダを作成して、上記の画像やソースを全部入れて…。以下で実行。
love フォルダ名
◎ 少し解説。 :
conf.lua というファイルを作って中に色々書いておくと、ウインドウサイズ、ウインドウタイトル、フルスクリーン表示等が指定できる。love.conf(t) という関数を作って…。
main.lua に、処理を書く。
love.graphics.setColor(R, G, B, A) は…。それ以後に描画するアレコレの色を変化させることができるらしい。
- t.window.width で、ウインドウ横幅を、t.window.height で、ウインドウ縦幅を指定。
- t.window.title で、ウインドウタイトルを指定。
- t.window.fullscreen で、フルスクリーン表示にするかしないか。
- t.window.fullscreentype で、フルスクリーン表示時の種類を指定。
- t.window.vsync で、vsync を見る、のかな。
main.lua に、処理を書く。
- 関数 love.load() に、初期化処理を書く。
- 関数 love.update(dt) に、更新処理を書く。dt には、前回の更新処理からの時間が秒単位で入っている、らしい。
- 関数 love.draw() に、描画処理を書く。
- 関数 love.keypressed(key, isrepeat) を書くと、キーが押されるたびにその関数が呼ばれる。
- 画像の読み込み : love.graphics.newImage("画像ファイル名")
- キーの押し下げ判定 : love.keyboard.isDown("キー種類")
- 画像の描画 : love.graphics.draw(画像が入ってる変数, 描画位置x, 描画位置y)
- 文字列の描画 : love.graphics.print("文字列", 描画位置x, 描画位置y)
- ウインドウサイズの取得 : love.graphics.getWidth()、love.graphics.getHeight()
- 画像サイズの取得 : 画像の入った変数:getWitdh()、:getHeight()
- FPSの取得 : love.timer.getFPS()
love.graphics.setColor(R, G, B, A) は…。それ以後に描画するアレコレの色を変化させることができるらしい。
◎ 気になる点。 :
love.timer.getFPS() でFPSが取得できるらしいのだけど、なんだかスゴイ値になってる…。何故。
[ ツッコむ ]
以上です。