javafx中的tree_JavaFX中的塔防

javafx中的tree

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

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

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

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

Bildschirmfoto-2013-08-06-um-16.41.16

下一步是编码。 我只是用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。 当我们从用户交互开始时,我可能稍后再显示代码。 现在,这是我们在启动游戏后看到的内容:

Bildschirmfoto-2013-08-06-um-16.44.09

难看的红色区域是默认背景。 不幸的是,背景图像的Dimension并非图块大小的倍数,因此稍后我将不得不定义一个不正确的地方。 现在,我将忽略它,它只是一个背景……

现在,我们希望用户能够放置炮塔。 目前,玩家拥有不限量的金钱,因此他可以根据需要放置任意数量的炮塔。 唯一的限制是,只有在平台上并且没有炮塔的情况下,他才可以放置它们。 因此,我们为Mouse事件添加了一个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中的tree

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu linux theme,如何在Ubuntu 20.04中启用全局暗黑主题

Ubuntu 20.04在设置实用程序中引入了新的Dark暗模式。但是,当您在Gnome Shell中将其打开时,它并不是完全暗黑。系统任务栏菜单,顶部栏中的日历,通知弹出窗口和桌面上下文菜单不是暗的,而且当您在 Light,Dar…

python3语音识别模块_零基础教你玩转语音控制,学习语音控制技术,打造智能生活很简单...

大家好,我是阿乐,今天给大家讲解一下LD3320语音识别模块。先来看看模块实物,它是长这个样子的:LD3320语音识别模块实物我现在用来给大家做讲解的这个模块是已经集成了单片机在上面,这样子开发起来就更简单一些&#xf…

Apache Derby数据库用户和权限

抽象 Apache Derby很棒! 尤其是在微服务环境中,服务的数据(可能)会缩减,并且不需要更强大的RDBMS。 Derby很棒,因为它非常易于使用,尤其是在涉及用户和权限时,您不需要任何东西&…

c语言程序设计常用语句格式,全国计算机考试二级C语言程序设计要求

(一)C语言的结构1、程序的构成,main函数和其他函数。2、头文件、数据说明、函数的开始和结束标志。3、源程序的书写格式。4、C语言的风格。(二)数据类型及其运算1、C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法。2、C运算符的种类、运算优先级和…

python绘制直方图显示数字_python dataframe中各元素出现次数统计及画直方图

比如: print(Counter(a[0])) Counter({sausage: 825, whole milk: 717, frankfurter: 580, tropical fruit: 482, other vegetables: 460, citrus fruit: 453, pork: 385, rolls/buns: 336, chicken: 311, canned beer: 310, beef: 304, soda: 294, root vegetables…

应用c语言编辑画图程序,应用C语言编辑画图程序

您可能感兴趣的话题:C语言核心提示:笔者在开发县级电网调度自动化系统的过程中,碰到一个要绘制电力系统一次接线图的问题笔者在开发县级电网调度自动化系统的过程中,碰到一个要绘制电力系统一次接线图的问题.由于电力系统一次接线图比较复杂,用一般的编程…

多少秒算长镜头_自从搞烘焙后,遇到烘焙模具换算,秒变数学渣...

从小学到大学我们学习的计量单位简直太多了,秒、米 、千克、开尔文、安培、坎德拉、摩尔......什么长度、体积、面积都知道怎么算,想想上学的时候我还是很强大的。 自从搞烘焙后,遇到烘焙模具换算,秒变数学渣...教程食谱中的一小勺…

怎样实现登录用户管理_如何编写程序实现图书管理系统里面的用户管理功能

上节课完成了库存管理功能。这节课来完成用户管理功能。编写用户管理功能用户管理主要是针对数据库表user进行维护,功能包括查询、新增、编辑和删除。特别注意,删除用户时要确保该用户的不存在订单记录。防止在查询订单时找不到对应的用户信息&#xff0…

rest开发_REST 101开发人员专用

rest开发本地代码执行 诸如C之类的高级语言中的函数将被汇编为Assembly中的过程 。 它们增加了一个间接级别,使我们不必考虑内存地址。 诸如Java之类的面向对象语言中的方法和多态性增加了另一种间接性 ,使我们不必考虑一组相似功能的特定变体。 尽管…

c语言 交互式电子白板案例,交互式电子白板教学案例

交互式电子白板教学案例交互式电子白板教学案例——电子白板让修改习作不再难钢城一小 熊莉红前言——转眼间,一年的时间稍瞬即逝。2012年的暑假,我们学校在每一个班级都安装了交互式电子白板,面对着这一新兴的产物,老师们跃跃欲试…

matlabrvctools主要功能及实际应用_【从业必备 | 收藏】ISO26262功能安全标准白皮书:关键组成、软硬件认证、测试过程、合规认证工具...

ISO26262功能安全标准白皮书:关键组成、软硬件认证、测试过程,合规的认证工具目 录背景ISO 26262的关键部分硬件组件认证软件组件认证“在实践中证明”的证据应用于现有流程测试工具认证下一步1. 背景随着各行业引进一系列产品设计和测试的标准化流…

python语言中整型对应的英文_Python基本数据类型详细介绍(转)

1、空(None)表示该值是一个空对象,空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。 2、布尔类型(Boolean) 在 Python中&#xf…

JVM体系结构:JVM中的执行引擎

各位读者好! 在JVM系列的上一篇文章中,开发人员了解了虚拟机的ClassLoader和Runtime Data Areas组件。 本教程将帮助开发人员正确理解JVM中的执行引擎 。 1.简介 在继续之前,让我们看一下Java虚拟机及其基本特征。 1.1什么是Java虚拟机&…

简单c语言课设计题目,C语言课程设计题目

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼18、学生管理系统(限最多2人完成)使用下面的数据,用C设计一个简单的学籍管理系统,实现出最基本的功能。学生基本信息文件(A.TXT)及其内容:A.TXT文件不需要编程录入数据,可用文本编辑工…

python编程语言优缺点_原创001 第一次接触这个神奇而又无所不能的编程语言:Python...

***********************人生苦短,我用Python,不定期更新博客,小伙伴们记得关注******************** OK,说到Python这个语言,相信大家。对它还是有一点小陌生,对于编程语言来说,我们大家耳熟能…

android文件读写操作布局文件代码,android实现文件读写功能

本文实例为大家分享了android实现文件读写功能的具体代码,供大家参考,具体内容如下读取:public static String _getJsonString(String fileName)throws IOException {if ((fileName null) || fileName.isEmpty()) {return "";}Str…

ese如何实现支付 nfc_海运费如何实现快捷支付?答案有了

快捷支付时代,海运费支付能否更简单?“航运在线通”给出了答案。1月9日,中国银行天津市分行举行了“航运在线通”产品发布会。天津市商务局、天津市金融局、天津市税务局、中国人民银行、国家外汇管理局天津市分局、中国银行总分行相关领导及…

smtplib 抄送邮件_用Python收发电子邮件

电子邮件是最古老的互联网服务之一,发明于1969年,它已经50岁了!它并不要求收信人发信人同时连接网络,邮件存放于服务器,所以至今在企业内部还在大量使用。而且它是开放协议,没有被某大公司垄断。我们完全可…

带有JUnit 5支持的Ant 1.10.3发布

我们今天刚刚发布了 1.9.11和1.10.3版本的Ant。 这些下载位于Ant项目的下载页面上 。 这两个版本主要是错误修复版本,尤其是1.9.11版本。 由于几个原因,1.10.3版本是重要的版本。 先前的1.10.2版本无意中引入了许多更改,这些更改导致Ant任务中…

android 号码查联系人,Android联系人查询

我在查询电话簿联系人时遇到问题.我需要做的是获取同时输入电话和电子邮件或特定类型的联系人列表.基本上是这样的:public static final String SELECTION "("ContactsContract.Contacts.HAS_PHONE_NUMBER "1) OR " RawContacts.ACCOUNT_TYPE …