2017/12/08(金) [n年前の日記]
#1 [love2d] love2dでパーティクルを出すサンプル
love2dでパーティクルを出すサンプルソースをアップしてみたり。
ParticleSystemの使い方については、 _昨日の日記 を参照のこと。
こんな感じの画面に。
ParticleSystemの使い方については、 _昨日の日記 を参照のこと。
こんな感じの画面に。
◎ 画像とソース。 :
License : CC0 / Public Domain ってことで。画像は以下。
_box01_64x64.png
_star02_48x48.png
_ball01_64x64.png
ソースは以下。
_conf.lua
_main.lua
コメントアウト(行頭に「--」がついてる箇所)を外してみたり、与えている数値を書き換えてみれば、動きが変わったりするので、使い方もなんとなく分かるかなと…。
_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
コメントアウト(行頭に「--」がついてる箇所)を外してみたり、与えている数値を書き換えてみれば、動きが変わったりするので、使い方もなんとなく分かるかなと…。
[ ツッコむ ]
以上です。