love2d教程10--粒子效果


(下面的說法沒有求證,是我估計的)粒子從名字可以看出是一種較小的東西,在游戲中粒子

也是小的圖片(也有大的).我估計招式就是用粒子效果做的.

粒子效果就是把一個圖片用不同的方法(旋轉,縮放,平移等)不斷的在屏幕上,按照預設隨機

的生成許多粒子.這樣看起來就很華麗了.

下面看一下效果(這個效果是截取的hge里的)

love2d自帶particialsystem,可是僅支持Image類型,不支持Quad,

這樣就只能把每個粒子作為單獨的圖片存放,不方便阿.當然我們也可

以利用love.graphics里的函數自己實現一個,不過你看看wiki里的

particialsystem的屬性個數,實現起來它復雜了.

后來我在wiki里找到了把hge粒子效果文件轉為love屬性的工具,

地址https://love2d.org/wiki/psi2love是0.7版本的,我稍微修改了一下以適合0.8版本,修改的地方如下:

114行改為printf( "  ps:setSizes( %g, %g )
80行改為printf( "  local ps = love.graphics.newParticleSystem( img, %s )\n", argv[ 4 ] );
再把80行上面添加一行 printf("  local img=love.graphics.newImage(\"%s\")\n",argv[3]);

請先下載代碼(看文末),切換到hgeparticle_tool目錄如下:

linux我已經編譯好了,win下請自行編譯psi2love.cpp

這是個純cpp,不需要設置.下面我說說如何使用:

linux下./psi2love particle8.psi par par.png 100 > par.lua

win下去掉"./"

參數意義 psi文件 生成的lua函數名 使用的圖片 粒子最大個數

其中"> par.lua"是重定向到輸出文件.生成的文件如下.

local function par()
  -- created from particle8.psi

  local img=love.graphics.newImage("par.png")
  local ps = love.graphics.newParticleSystem( img, 100 )

  ps:setEmissionRate( 13 )
  ps:setLifetime( -1 ) -- forever
  ps:setParticleLife( 0.436508, 0.992063 )
  ps:setDirection( -1.5708 )
  ps:setSpread( 6.28319 )
  -- ps:setRelative( false )
  ps:setSpeed( 9.5238, 9.5238 )
  ps:setGravity( 0, 0 )
  ps:setRadialAcceleration( -0.634921, -0.634921 )
  ps:setTangentialAcceleration( 0, 0 )
  ps:setSizes( 1.3817, 2.04464 ) -- there's a bug in 0.7.1 that forces us to set the size variation using its own function
  ps:setSizeVariation( 0.428571 )
  ps:setSpin( 0, 0, 0 )
  ps:setColors( 46, 145, 255, 46, 248, 139, 44, 72 )
  -- ps:setColorVariation( 0.206349 )
  -- ps:setAlphaVariation( 0 )

  return ps
end

這里使用的hge工具只是方便設置love粒子的屬性,因為可以隨時看到效果,保存為psi文件后,可以用psi2love轉為love的屬性.

運行particleCN.exe(linux下使用wine),如下圖,你可以設置不同的參數查看效果.

 右下角的1-9九個按鈕是加載預定義的效果,即particle1-9.psi

可惜的是hge的粒子效果使用的是particles.png里的圖塊.

particles.png是128*128,里面的圖塊是32*32,你可以自己按這個規格

做一個.可惜不會處理,下面的效果是用的particle8.psi的描述,圖片

是在網上隨便找的一個.效果如下:

下面說一下如何使用particilsystem.

1.在load里

img=love.graphics.newImage("par.png") --加載圖片

ps = love.graphics.newParticleSystem( img, 100 ) --使用img創建圖片,最大粒子數100

2.在draw里

love.graphics.draw(ps,400,300) --繪制粒子

3.在update里

ps:update(dt) --更新粒子

說明一下,粒子的屬性很多可以看wiki,其中setLifetime若為-1就一直循環,否則時間結束后停止.

 

代碼下載,已clone的直接git pull
git clone git://gitcafe.com/dwdcth/love2d-tutor.git
或git clone https://github.com/dwdcth/mylove2d-tutor-in-chinese.git

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM