(下面的說法沒有求證,是我估計的)粒子從名字可以看出是一種較小的東西,在游戲中粒子
也是小的圖片(也有大的).我估計招式就是用粒子效果做的.
粒子效果就是把一個圖片用不同的方法(旋轉,縮放,平移等)不斷的在屏幕上,按照預設隨機
的生成許多粒子.這樣看起來就很華麗了.
下面看一下效果(這個效果是截取的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