FXGL游戏开发-动画效果

在【FXGL游戏开发-碰撞处理】这章节中,已经实现两辆坦克的碰撞效果,当玩家的坦克(蓝色)撞上敌军坦克(绿色)时,玩家的坦克自动消失,但是玩家坦克是立即消失的,看起来比较生硬,现在给玩家坦克消失前加个爆炸的动画效果。

重新改造一下【FXGL游戏开发-碰撞处理】中 initPhysics() 的碰撞处理代码,分为三步:

  1. 构建动画Entity,并添加到游戏世界中
  2. 移除玩家坦克
  3. 播放爆炸动画

具体实现如下:

@Override
protected void initPhysics() {
    FXGL.getPhysicsWorld().addCollisionHandler(new CollisionHandler(Type.PLAYER, Type.ENEMY) {
        @Override
        protected void onCollisionBegin(Entity e1, Entity e2) {
            // 1. 构建动画 Entity
            Entity entity = new Entity();
            entity.setPosition(e1.getX() - 40, e1.getY() - 40);
            AnimatedTexture texture = FXGL.texture("explosion.png").toAnimatedTexture(16, Duration.seconds(1));
            texture.setOnCycleFinished(entity::removeFromWorld);
            entity.getViewComponent().addChild(texture);
            FXGL.getGameWorld().addEntity(entity);
            // 2. 移除玩家坦克
            e1.removeFromWorld();
            // 3. 播放动画
            texture.play();
        }
    });
}

上面的例子中,toAnimatedTexture() 将普通的 Texture 转化动画,16表示图片为16帧,texture.setOnCycleFinished(entity::removeFromWorld) 设置在动画播放结束时,将动画 Entity 从游戏世界中移除。

运行效果:

这样,有了动画效果,玩家坦克的消失就不会看起来很生硬了。

===========================================================================
HiIT青年
关注公众号,阅读更多文章。

posted @ 2022-10-23 22:13  HiIT青年  阅读(153)  评论(0编辑  收藏  举报