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

 

posted @ 2012-12-29 16:21  半山th  阅读(2425)  评论(4编辑  收藏  举报