mieki256's diary



2017/10/31(火) [n年前の日記]

#1 [love2d][lua] love2dを勉強中

とりあえず Windows10 x64上でlove2dを勉強中。

love2dは、lua言語からSDL2を利用して2Dゲームを制作できるライブラリ、という説明でいいのかな…?

_LOVE - Free 2D Game Engine

画像をキー入力で動かすサンプル。 :

以下の記事が参考になった。ありがたや。

_Love2D:ゲームエンジンその4 - Qiita

こんな感じの結果に。

love2d_move_sprite_ss.gif

ソースと画像。 :

使用画像は以下。License : CC0 ってことで。

_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) という関数を作って…。
  • 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が取得できるらしいのだけど、なんだかスゴイ値になってる…。何故。

以上です。

過去ログ表示

Prev - 2017/10 - 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