我想长时间使用我的游戏引擎来编写《塔防》游戏,但是由于另一个小组努力创建JavaFX《塔防》游戏,所以我认为我宁愿创建另一款游戏。 从邮件列表中,我了解到不再开发其他游戏。 因此,我决定尝试一下。

塔防是一款非常适合基于图块的方法的游戏,因此我开始寻找一些图块。 我在这里找到了一些东西 ,而艺术家Silviu Ploisteanu允许我在演示中使用它们。 塔防作为游戏与TileMap编辑器非常相似,因此我将能够重用我之前创建的编辑器中的许多代码:

首先要做的是将单个图形组合成图像进行平铺。 我对敌人,炮塔基地,大炮,地形进行了分组,还为背景创建了一个图块图块。 之后,我使用了TileMap编辑器( http://www.mapeditor.org/ )从这些图像创建TileSet。 我可能不得不再次做这部分,因为Gimp在此过程中更改了颜色,但是现在我对图像的外观不太在意。

然后,我从底部到顶部将5层添加到新地图:“背景”,“地形”,“炮塔基地”,“炮塔大炮”和“敌人”。 也将有一个“子弹和爆炸”层,但我稍后会手动添加。 到目前为止,还没有涉及任何编码,通过基于TileMap的方法,我们已经有了游戏的序列化格式。 因此,当用户编辑地图时,我们可以简单地将更改存储到TileMap中。 现在的地图如下所示:

下一步是编码。 我只是用BorderPane创建了一个新的JavaFX Application。 在中心,我将有一个运动场,在右边,我将有一个带有大炮的调色板。

这是创建GameCanvas的方法:

tileMap = TileMapReader.readMap(fileURL);
canvas = new GameCanvas(tileMap.getTilewidth() * tileMap.getWidth(), tileMap.getHeight() * tileMap.getTileheight(), tileMap.getTilewidth() * tileMap.getWidth(), tileMap.getHeight() * tileMap.getTileheight());
// add all the layers
ArrayList layers = tileMap.getLayers();
for (TileMapLayer tileMapLayer : layers) {canvas.addLayer(tileMapLayer);
}

然后我获得带有大炮的TileSet并创建Palette。 我正在为调色板使用VBox,因为我还希望使地形可编辑,因此以后我可能会添加另一个TileSet:

TileSet turrets = tileMap.getTileSet("turrets");TileSetView turretView = new TileSetView(turrets);
VBox palette = new VBox();
palette.getChildren().addAll(turretView);

TileSetView仅显示基础图像,并允许您通过单击鼠标来选择一个Tile。 当我们从用户交互开始时,我可能会稍后再显示代码。 现在,这是我们在启动游戏后看到的内容:

难看的红色区域是默认背景。 不幸的是,背景图像的尺寸不是平铺尺寸的倍数,因此稍后我将不得不定义一个不合理的尺寸。 现在,我将忽略它,它只是一个背景……

现在,我们希望用户能够放置炮塔。 目前,玩家拥有不限量的金钱,因此他可以根据需要放置任意数量的炮塔。 唯一的限制是,只有在平台上并且没有炮塔的情况下,他才能放置它们。 因此,我们为鼠标事件添加了一个EventHandler,该事件处理程序是从Palette中选择的炮塔,并将其添加到炮塔基础层。 为了简单起见,我现在将炮塔基座和炮塔组合成一个图像:

canvas.setOnMousePressed(new EventHandler() {
@Override
public void handle(MouseEvent t) {double x = t.getX();
double y = t.getY();int idx = (int) ((int) x / tileMap.getTilewidth() + (((int) y / tileMap.getTileheight()) * tileMap.getWidth()));
if (platformLayer.getGid(idx) != 0 && turretBaseLayer.getGid(idx)==0) {
turretBaseLayer.getData().setGid(idx, turretView.getSelectedGid());
}
}
});

结果,我们现在可以将转塔放置在没有平台但还没有转塔的地方:

我认为第一部分已经表明,该API非常适合创建simplegame,而无需编写大量代码。 在下一部分中,我们将添加生成点和目标,并使用A *计算敌人路径。

参考: Eppleton博客上的JCG合作伙伴 Toni Epple提供的JavaFX中的塔防功能 。

翻译自: https://www.javacodegeeks.com/2013/10/tower-defense-in-javafx.html

JavaFX中的塔防相关推荐

  1. JavaFX中的塔防(5)

    这是本使用FXGameEngine在JavaFX中创建塔防游戏的正在进行的教程的第5部分. 敌人现在飞向目标的攻击路径,炮塔瞄准并射击. 因此,最重要的部分在那里,但是仍然缺少许多细节. 游戏只是开始 ...

  2. JavaFX中的塔防(2)

    在上一部分中,我们创建了一个简单的编辑器,让我们放置炮塔. 现在,我们将在敌人起源的地方添加一个生成点,并为其定义攻击目标. 首先,我将通过对象层向地图添加更多信息. 这是标准的TMX,因此我们可以在 ...

  3. JavaFX中的塔防(3)

    在最后一部分中,您了解了如何创建Sprite,为其设置动画并赋予其Behavior. 但是动画效果不是很好,因为作为Insectoid,您应该始终看起来在飞行中. 记住:安全第一! 我们可以通过创建自 ...

  4. JavaFX中的塔防(6)

    因此,我们已经在本教程的第6部分中,与此同时,游戏也取得了长足的进步. 在这一部分中,我们最终将添加一个显示得分的图层,已达到目标的敌人数量,启动下一个Wave的按钮以及用于购买新炮塔的资金. 说到钱 ...

  5. JavaFX中的塔防(4)

    好的,到目前为止,我们已经创建了一个TileMap,将其显示在屏幕上,并使其在第一部分中可编辑. 在第二部分中,我们使用A *算法实现了攻击路径的计算,并使敌人跟随该路径. 在第三部分中,我们创建了一 ...

  6. javafx中的tree_JavaFX中的塔防(4)

    javafx中的tree 好的,到目前为止,我们已经创建了一个TileMap,将其显示在屏幕上,并使其在第一部分中可编辑. 在第二部分中,我们使用A *算法实现了攻击路径的计算,并使敌人跟随该路径. ...

  7. javafx中的tree_JavaFX中的塔防(5)

    javafx中的tree 这是有关使用FXGameEngine在JavaFX中创建塔防游戏的本教程的第5部分. 敌人现在飞向目标的攻击路径,炮塔瞄准并射击. 因此,最重要的部分在那里,但是仍然缺少许多 ...

  8. javafx中的tree_JavaFX中的塔防

    javafx中的tree 我想长时间使用我的游戏引擎来编写<塔防>游戏,但是由于另一个小组努力创建JavaFX<塔防>游戏,所以我认为我宁愿创建另一款游戏. 从邮件列表中,我了 ...

  9. javafx中的tree_JavaFX中的塔防(2)

    javafx中的tree 在最后一部分,我们创建了一个简单的编辑器,让我们放置炮塔. 现在,我们将在敌人起源处添加一个生成点,并为其定义攻击目标. 首先,我将通过对象层向地图添加更多信息. 这是标准的 ...

最新文章

  1. 非 985/211 学校的毕业生,进大厂的机率有多大?
  2. 我们小时候,开学是这样的!差点看哭了!
  3. 直播报名 | 基金业数字化运营指标体系建设
  4. htaccess简介和16个小技巧
  5. Java并发编程实战~CyclicBarrier
  6. Redis学习总结(6)——Redis 高级特性与案例学习
  7. vs设置编码格式_轻松编辑PDF文档的贝茨编码
  8. 【正点原子MP157连载】第二十五章 I2C光照接近传感器实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南
  9. SC;FC;LC;光纤接口介绍
  10. Mac SDK环境变量配置
  11. php redis zset 延迟队列_PHP多进程基于Redis实现轻量级延迟队列
  12. sock 中的send和recv
  13. Reaction of travel book-ShanXi
  14. 自定义桌面右键菜单-Win 10 版
  15. @synthesize@dynamic@private,@protected,@publicassign、weak、strong、retain、copy、nonatomic、atomic
  16. 苹果微信分身版ios_苹果手机ios14系统微信分身地址安装教程
  17. MySQL数据库13——插入数据(INSERT)
  18. UML系列——协作图(通信图)collaboration diagram
  19. 详解IP地址后面斜杠加具体数字
  20. 学计算机广东2B大学,广东2b大学排名2018及名单

热门文章

  1. IDEA导入Eclipse项目
  2. ps查看所有php进程,ps命令就是最基本进程查看命令
  3. docker容器的标准使用过程_phpStorm中使用xdebug工具调试docker容器中的程序
  4. Spring boot web(2):web综合开发
  5. java面试常见面试问题_Java面试准备:15个Java面试问题
  6. optionals_Java Optionals获得更具表现力的代码
  7. jpa root.join_JPA 2.1和Java EE 7中的JPQL增强功能(第1部分– JOIN ON)
  8. java的网络编程有用吗_十大有用但又偏执的Java编程技术
  9. 存储过程 锁定并发_Java并发教程–锁定:显式锁定
  10. hibernate状态_Hibernate状态的自然身份证