java游戏开发入门十 - 粒子特效 {#java游戏开发入门十---粒子特效}
前言 {#前言}
这里只学习API调用,至于怎么弄的好看,就需要自己花点心思了,或者直接放图?
编码 {#编码}
创建一个粒子发射器,并将粒子发射器添加到实体对象 {#创建一个粒子发射器并将粒子发射器添加到实体对象}
/**
* 创建玩家实体
* @return 玩家实体
*/
@Spawns("Player")
public Entity newPlayer(SpawnData data){
//引入Player图片资源
var texture = texture("player.gif");
var emitter = new ParticleEmitter();
emitter.setMaxEmissions(Integer.MAX_VALUE);
// 粒子数
emitter.setNumParticles(50);
emitter.setEmissionRate(0.6);
// 粒子大小(最小值,最大值),创建的大小将是最小值(包括)和最大值(不包括)之间的随机值。
emitter.setSize(1, 5);
// 定义粒子大小如何随时间变化。
emitter.setScaleFunction(i -> FXGLMath.randomPoint2D().multiply(0.2));
// 定义粒子的过期时间
emitter.setExpireFunction(i -> Duration.seconds(random(0.25, 2.5)));
// 例子偏移方向
emitter.setAccelerationFunction(() -> new Point2D(1,1));
// 例子初始速度
emitter.setVelocityFunction(i -> FXGLMath.randomPoint2D().multiply(random(1, 10)));
// 例子初始位置(实体的相对坐标,0,0即实体的 x,y位置/ 30,50即实体的 x+30,y+50位置)
emitter.setSpawnPointFunction(i-> new Point2D(30,60));
// emitter.setColor(Color.BLUE);
emitter.setStartColor(Color.BLUE);
emitter.setEndColor(Color.RED);
return FXGL.entityBuilder(data)
// 声明设备类型
.type(EntityType.PLAYER)
// 将实体标记为可碰撞,并根据UI大小自动生成碰撞体积
.collidable()
// 添加粒子效果
.with(new ParticleComponent(emitter))
.viewWithBBox(texture)
.build();
}
效果图 {#效果图}
完整代码 {#完整代码}
全部代码以后就不贴了,去github上看就好了
完整项目 {#完整项目}
https://github.com/lhDream/lhDreamGameDemo/tree/master/HelloWorld