FXGL JAVA游戏引擎 教程 06_自定义地图加载器(给萌妹一个家)

上文中,我们已经获得了一个完整的游戏角色,他能正常的移动,还有一些自身的特色,但是还有一个比较显著的问题,我们当前的游戏却少一个世界。

1. 逻辑分析

抛开其他轮子不谈,我们要自己生成世界可以使用实体或者ui生成的方式按照自己自定的某种数据结构(可能是二维数组)来渲染我们设计出的地图。但是明显会发现这个二维数组的可读可维护性会比较糟糕。这里就需要引入FXGL的一个比较方便的点:可以支持tmx文件格式的地图导入。
首先我们需要下载一个地图编辑器

这里可以下载mapedit

下载完成后我们需要一些地图资源文件,这些都可以去爱给网上下载得到。
具有ps等软件使用基础的同学可以很容易的学会使用该制作器。
简简单单的画一点东西~在这里插入图片描述这里着重介绍一下图层问题,不同的图层这个很好理解,高位的会遮盖掉低位图层的东西。对象层也是图层的一种,而且尤其重要。

在这里插入图片描述
地图中有很多图块,但是这些图块最后会被组成一张image图片整体渲染到游戏中,如果我们希望实现某些图块有特殊操作,某些图块不能通过等等问题,我们需要增加obj对象。这些对象上的类型会在你加载项目的时候,从游戏引擎内的实体工厂寻找并且添加在游戏世界中。在这里插入图片描述

2.代码实践

整体的代码实现很简单,首先我们现在最早的工厂中增加wall对象
GameEntityFactory.java

   @Spawns("wall")
    public Entity newWall(SpawnData data) {
        Entity build = FXGL
                .entityBuilder(data)
                .bbox(new HitBox(BoundingShape.box(data.<Integer>get("width"), data.<Integer>get("height"))) )
                .collidable()
                .with(new PhysicsComponent())
                .build();
        return build;
    }

然后再app的init阶段注入该工厂

    @Override
    protected void initGame() {
        FXGL.getGameWorld().addEntityFactory(new GameEntityFactory());
        //加载地图的方法
        setLevel();
        Entity entity = CustomerEntityFactory.createEntity(EntityType.PLANE);
        //绑定视角 固定视角
        FXGL.getGameWorld().addEntity(entity);
                Viewport viewport = FXGL.getGameScene().getViewport();
        viewport.setBounds(-10000,-10000,250 *70,10000);
        viewport.bindToEntity(entity, FXGL.getAppWidth() / 2, FXGL.getAppHeight() / 2);


    }

然后就是加载地图方法

  private void setLevel() {
        //首先移除全部的实体
      FXGL.getGameWorld().getEntitiesCopy().forEach(t -> t.removeFromWorld());
      //加载地图
      FXGL.setLevelFromMap("tmx/obj_test.tmx");
    }

让我们运行一下,真不错。


当然,这还是一个很简单的游戏框架,但是已经能够制作很简单rpggame了。

这里是本期的git代码

回主目录

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值