南宁公司网站设计,wordpress template hierarchy,做网站有多砸钱,机关网站建设管理工作自查报告javafx中的tree我想长时间使用我的游戏引擎来编写《塔防》游戏#xff0c;但是由于另一个小组努力创建JavaFX《塔防》游戏#xff0c;所以我认为我宁愿创建另一款游戏。 从邮件列表中#xff0c;我了解到不再开发其他游戏。 因此#xff0c;我决定尝试一下。 塔防是一款非… javafx中的tree 我想长时间使用我的游戏引擎来编写《塔防》游戏但是由于另一个小组努力创建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。 当我们从用户交互开始时我可能稍后再显示代码。 现在这是我们在启动游戏后看到的内容 难看的红色区域是默认背景。 不幸的是背景图像的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.htmljavafx中的tree