mieki256's diary



2017/12/08(金) [n年前の日記]

#1 [love2d] love2dでパーティクルを出すサンプル

love2dでパーティクルを出すサンプルソースをアップしてみたり。

ParticleSystemの使い方については、 _昨日の日記 を参照のこと。

こんな感じの画面に。

particle_test01_ss.gif

画像とソース。 :

License : CC0 / Public Domain ってことで。画像は以下。

_box01_64x64.png
_star02_48x48.png
_ball01_64x64.png

ソースは以下。

_conf.lua
function love.conf(t)
  t.window.title = "ParticleSystem Test 01"
  -- t.window.vsync = true
  -- t.window.width = 1280
  -- t.window.height = 720
  -- t.window.fullscreen = true
  -- t.window.fullscreentype = "exclusive"
end

_main.lua
-- ParticleSystem test 01

function love.load()
  -- set filter
  love.graphics.setDefaultFilter("nearest", "nearest")

  scr_w = 640
  scr_h = 480
  canvas = love.graphics.newCanvas(scr_w, scr_h)

  -- load image
  -- img = love.graphics.newImage("star02_48x48.png")
  img = love.graphics.newImage("box01_64x64.png")
  -- img = love.graphics.newImage("ball01_64x64.png")

  -- init particle
  psystem = love.graphics.newParticleSystem(img, 128)

  psystem:setParticleLifetime(0.5, 1.0)
  psystem:setColors(255, 255, 255, 255, 255, 255, 255, 0)

  -- psystem:setRelativeRotation(true)
  -- psystem:setRelativeRotation(false)

  local spd = 600
  psystem:setSpeed(spd, spd * 1.2)
  psystem:setLinearDamping(2.0, 4.0)
  -- psystem:setLinearAcceleration(-spd, -spd, spd, spd)
  -- psystem:setRadialAcceleration(-spd * 1.5, -spd * 1.0)
  -- psystem:setTangentialAcceleration(-900, 900)

  psystem:setSpread(math.rad(360))
  -- psystem:setSpread(math.rad(90))

  psystem:setRotation(-math.rad(45), math.rad(45))
  -- psystem:setRotation(math.rad(0), math.rad(360))
  -- psystem:setSpin(-math.rad(360 * 2), math.rad(360 * 2))

  psystem:setSizes(1.0, 0.1)
  psystem:setSizeVariation(0.3)

  -- psystem:setEmissionRate(60)

  timer = 0
end

function love.update(dt)
  timer = timer + dt
  local t = 2.0
  if timer >= t then
    timer = timer - t
    psystem:emit(64)
  end

  psystem:update(dt)
end

function love.draw()
  -- set canvas
  love.graphics.setCanvas(canvas)

  love.graphics.setColor(0, 32, 64)
  love.graphics.rectangle("fill", 0, 0, scr_w, scr_h)
  -- love.graphics.draw(bgimg, 0, 0)

  love.graphics.setColor(255, 255, 255)
  -- love.graphics.setBlendMode("add")
  love.graphics.draw(psystem, scr_w / 2, scr_h / 2)
  love.graphics.setBlendMode("alpha")

  -- unset canvas
  love.graphics.setCanvas()

  -- draw canvas to window
  wdw_w, wdw_h = love.graphics.getDimensions()
  scr_scale = math.min((wdw_w / scr_w), (wdw_h / scr_h))
  scr_ofsx = (wdw_w - (scr_w * scr_scale)) / 2
  scr_ofsy = (wdw_h - (scr_h * scr_scale)) / 2
  love.graphics.setColor(255, 255, 255)
  love.graphics.draw(canvas, scr_ofsx, scr_ofsy, 0, scr_scale, scr_scale)

  love.graphics.print("FPS: "..tostring(love.timer.getFPS()), 10, 10)
end

function love.keypressed(key, isrepeat)
  if key == "escape" then
    -- ESC to exit
    love.event.quit()
  end
end

コメントアウト(行頭に「--」がついてる箇所)を外してみたり、与えている数値を書き換えてみれば、動きが変わったりするので、使い方もなんとなく分かるかなと…。

以上です。

過去ログ表示

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