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
作者:半山
出处:http://www.cnblogs.com/xdao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。