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();
    }

效果图

1731139988121.png

完整代码

全部代码以后就不贴了,去github上看就好了

完整项目

https://github.com/lhDream/lhDreamGameDemo/tree/master/HelloWorld

淡淡的心,回味的情