javafx中的tree

因此,我们已经在本教程的第6部分中,与此同时,游戏也取得了长足的进步。 在这一部分中,我们最终将添加一个显示得分的图层,已达到目标的敌人数量,启动下一个Wave的按钮以及用于购买新炮塔的资金。 说到钱,我们还没有逻辑,所以我们应该先解决这个问题。 不过,我不想将价格存储在应用程序代码中,因为这样会使我虚构的关卡设计师(不懂编程的人)难以微调变量。 我也想将所有东西都放在一个地方,所以如果我们决定添加一个新的刀塔,则不需要在许多不同的地方进行更改。 幸运的是,我们可以将属性存储在TileSet中,因此我们将这样做。

Tilemaps的TMX格式确实是一种将设计与编程内部结构区分开的好方法(当涉及到游戏时,业务逻辑听起来确实是错误的)。 结果,图形设计师可以创建资产,关卡设计师可以创建关卡,甚至用户也可以轻松地修改游戏并创建自己的关卡。 到目前为止,我们已经使用Tiled编辑器创建了一个关卡,并且还在其中一层中存储了一些有关敌人生成和攻击路径的元信息。 现在,我们将一些属性添加到TileSet的各个Tile中。 这仅适用于内部TileSet,因此在Tiled中,您必须通过“地图-> new Tileset”定义新的Tileset。 如果现在右键单击图块,则它具有定义图块属性的操作。 我已经为塔基定义了一些:

我添加了几个属性,包括武器的射程,射速,造成的伤害,名称和说明(稍后显示)以及类型,我想用来定义用作子弹的瓦片。 也许还会有像激光这样的武器,必须以不同的方式实施。 然后,我可以决定对这种类型使用不同的逻辑方式。 我可以通过Tileset从Tile获取属性,如下所示:

Properties properties = tileSet.getTileList().get(selectedIndex).getProperties();

在CannonSprite内,我可以这样使用它们:

String rangeProperty = properties.getProperty("range");
if (rangeProperty != null) {
range = Integer.parseInt(rangeProperty);
}
String damageProperty = properties.getProperty("damage");
if (damageProperty != null) {
damage = Integer.parseInt(damageProperty);
}
String rateProperty = properties.getProperty("firerate");
if (rateProperty != null) {
rate = Float.parseFloat(rateProperty);
}//....

我们将对EnemySprites做同样的事情,因此我们可以确定销毁它们的要点,它们的损坏抵抗力,也许是恢复率等。这种方法的优点之一是,它也非常易于扩展。 如果以后我决定添加一个新的炮塔,该炮塔会产生磁场以迷惑敌人并使他们的飞行速度变慢,我可以通过向该特定炮塔添加一个新的Property来做到这一点。 我不必更新旧的关卡设计或破坏用户的自定义关卡。 在这一方面,它类似于我最喜欢的编程技术之一,即“ 组成于继承 ”。

我们现在可以使用这些属性,例如,通过修改炮塔的FireBehavior评估间隔,使炮塔以不同的速率发射:

@Override
public long getEvaluationInterval() {
return (long)(2000000000*rate);
}

结果是:

现在第二个炮塔以更高的射速发射,同时每发子弹造成的伤害更少。 如果将炮塔的价格与不同的价格以及可放置炮塔的有限空间相结合,我们已经具备了使塔防成为有趣游戏的一些战略要素。 现在,我们的关卡设计师负责设计关卡,设置价格和其他属性,以使游戏变得有趣,同时我们继续添加更多功能。

现在让我们从HUD图层开始,简单地显示分数:

private class HUD extends Layer {@Override
public void draw(GraphicsContext graphicsContext, double x, double y, double width, double height) {
graphicsContext.setFill(Color.RED);
graphicsContext.setFont(Font.font("OricNeo", 12));
graphicsContext.fillText("Score: "+score, 10, 16);
}}

分数在我的游戏中定义为IntegerProperty(这不是JavaFX属性!),并传递给EnemySprites:

private IntegerProperty score = new IntegerProperty(0);

因此,在EnemySprites“ die”方法中,我们只是增加该值:

@Override
public void die() {
super.die();
getParent().addSprite(new Sprite(getParent(), explosionAnimation, "explosion", getX() - 30, getY() - 80, 128, 128, Lookup.EMPTY));
score.set(score.integerValue()+killPoints);
}

现在将HUD添加为顶层,您可以看到分数:

我们接下来需要的是某种方式开始浪潮。 为此,最好具有某种简单的控件,例如按钮。 我们可以用不同的方式添加。 最简单的方法可能是将画布放入StackPane中,在其顶部添加AnchorPane并向其添加JavaFX Node或Control。 但是我们只想使用FXGameEngine功能,所以我们将Sprite用作按钮:

final Sprite button = new Sprite(canvas, "button",  tileMap.getWidthInPixels()- 30, 20, 20, 20, Lookup.EMPTY);
button.setOnMouseClicked(new MouseEventHandler() {@Override
public void handle(MouseClick click) {
startWave();
button.die();
}
});
canvas.addSprite(button);

我很确定EventHandling的API仍会有所更改,但是它将保持与此类似的抽象。 此Sprite没有渲染器,因此将使用仅绘制Rectangle的默认渲染器:

今天就这样。 在下一部分中,我们将向游戏添加资金,因此它会变得更加有趣……

翻译自: https://www.javacodegeeks.com/2014/03/tower-defense-in-javafx-6.html

javafx中的tree

javafx中的tree_JavaFX中的塔防(6)相关推荐

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

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

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

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

  3. javafx中的tree_JavaFX中的塔防

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

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

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

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

    javafx中的tree 在最后一部分中,您了解了如何创建Sprite,为其设置动画并赋予其Behavior. 但是动画效果不是很好,因为作为Insectoid,您应该总是在飞行的地方看. 记住:安全 ...

  6. 《明日方舟》的塔防元素:是鸡肋还是精髓?

    我曾经不止一次的提到过一款国产的二次元塔防手游--它正是鹰角网络出品的<明日方舟>. 明日方舟 2019年4月30日ios开服,5月1日安卓端开服,几个月内的ios氪金榜多次登顶,这样的赫 ...

  7. JavaFX中的塔防(6)

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

  8. JavaFX中的塔防(5)

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

  9. JavaFX中的塔防(4)

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

最新文章

  1. linux 删除文件夹
  2. Android数据库新王者-Realm入门教程
  3. 技术深扒丨没点想象力都看不透这个网站的反爬措施!
  4. Centos7开启SSH服务
  5. cad布局教程_CAD制图初学入门之常见的CAD打印设置汇总
  6. Python字符串拼接的十种方式
  7. powerdesigner 导出数据库表结构
  8. Java Throwable initCause()方法与示例
  9. Nature Biotechnology | 单细胞转录组不同建库及数据分析方法的测评结果
  10. Golang实践录:xorm使用记录
  11. 比赛总结——atcoder beginner contest 109
  12. Linux下局域网通信软件(聊天室,附源码)
  13. 搭建以太坊私有链多节点环境
  14. 语音合成(TTS)论文优选:Robust Sequence-to-Sequence Acoustic Modeling with Stepwise Monotonic Attention for Ne
  15. 突破传统—复旦大学大数据学院张力课题组提出语义分割全新方案
  16. 元素出栈入栈顺序是否合法
  17. 转载:domain adaption
  18. IP地址和域名的关系
  19. 亡羊补牢为时未晚,网络安全从现在做起
  20. 怎么实时查看mysql当前连接数呢

热门文章

  1. 2-sat模板- 输出可行解
  2. 案例分析 | 由Decimal操作计算引发的Spark数据丢失问题
  3. Consul集群搭建
  4. vue组件自定义v-model
  5. Java 注解指导手册 – 终极向导
  6. [中级]Java命令学习系列(五)——jhat
  7. Spring Boot定制启动图案
  8. 你们考试,我们都有点紧张呢…
  9. 《白鹿原》金句摘抄(七)
  10. 优秀学生专栏——王浩