这是本使用FXGameEngine在JavaFX中创建塔防游戏的正在进行的教程的第5部分。 敌人现在飞向目标的攻击路径,炮塔瞄准并射击。 因此,最重要的部分在那里,但是仍然缺少许多细节。 游戏只是开始而没有给我们机会为下一个浪潮做准备。 它不显示分数(实际上还没有分数)。 浪潮永无止境,您无法赢或输。 因此,我们需要向HUD和控件添加一些游戏逻辑。 我们还需要查看敌人的损坏状态。 最后一个是功能,我们将在本教程的这一部分中进行介绍。

StackedRenderer

因此,让我们从敌人状态开始。 我们可以将它们添加到额外的HUD层中,因为这就是HUD的用途,但是我准备通过渲染器来实现。 每个精灵都有一个当前的渲染器。 您可以切换渲染器,这就是SpriteActions的功能(我们将在其他教程中介绍),但是您一次只能拥有一个活动的渲染器。 在我们的EnemySprite中,它是LookAheadTileSetAnimation。 为了允许渲染器的组合,可以使用StackedRenderer类。 它允许您堆叠无限数量的Renderer,并在每次方法调用时简单地将它们委托给它们。

因此,我们可以创建一个简单的HealthBarRenderer并使用它:

public class HealthBarRenderer implements Renderer {@Override
public boolean prepare(Sprite sprite, long time) {
return true;
}@Override
public void render(Sprite sprite, GraphicsContext context, float alpha, long time) {
EnemySprite enemySprite = (EnemySprite) sprite;
double health = enemySprite.getHealth();
double maxHealth = enemySprite.getMaxHealth();
if (health == maxHealth) {
return;
}int width = sprite.getWidth();
int height = sprite.getHeight();
double percent = health / maxHealth;
context.setFill( Color.rgb(200,200,200,.5));
context.fillRect(4+(width / 2), 10+(height / 2), (width / 2), 4);context.setFill( Color.rgb(0,255,0,.5));
if (percent < .5) {
context.setFill(Color.rgb(255,255,0,.5));
}
if (percent < .2) {
context.setFill(Color.rgb(255,0,0,0.5));
}
context.fillRect(4+(width / 2), 10+(height / 2), (width / 2 * percent), 4);
}
}

我们在StackedRenderer中使用它:

final TileSetAnimation tileSetAnimation = new LookAheadTileSetAnimation(enemy1, new int[]{0, 1, 2, 3, 4, 5}, 10f);
final StackedRenderer stacked = new StackedRenderer(tileSetAnimation, new HealthBarRenderer());

这就是我们得到的:

在下一部分中,我们将添加HUD。

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

JavaFX中的塔防(5)相关推荐

  1. JavaFX中的塔防

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

  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. pythonista3使用教程-pythonista3都能做什么
  2. Android的下载,编译, 运行
  3. ModuleNotFoundError: No module named 'mpl_toolkits.basemap'
  4. [linux]centos7下解决yum install mysql-server没有可用包
  5. .NET 之路 | 007 详解 .NET 程序集
  6. C++项目库包含,dll引用问题,直接把缺失的dll或库放置可执行文件里
  7. 【渝粤题库】广东开放大学社会学概论形成性考核
  8. 【Tools】ubuntu16.04升级Python2.7到3.5
  9. Oracle 11g数据库详细安装步骤图解
  10. jsp和mysql的乱码问题_jsp和servlet操作mysql中文乱码问题的解决办法
  11. sql进程意外终止_字节跳动五面都过了,竟然意外被刷了下来,问了hr原因竟说是。。。。。...
  12. tornado celery mysql_tornado中使用celery实现异步MySQL操作
  13. R可能让您惊喜的10件事
  14. Eclipse—在Eclipse中如何发布创建的JavaWeb工程
  15. Unix/Linux环境C编程新手教程(40) 初识文件操作
  16. 数据结构PTA期末复习题集
  17. mysql数据库双机备份_配置MySQL数据库双机热备份(转)
  18. (一)一文掌握flink性能优化:资源配置调优
  19. web前端培训—css源码笔记(二)【爱创课堂】
  20. 商品服务 - 销售属性维护,属性分组与属性关联

热门文章

  1. EasyExcel(笔记)
  2. Ubuntu下C++代码调用可执行文件。
  3. Mysql字符串截取 mysql将字符串字段转为数字排序或比大小
  4. 本地方法(JNI)——编码签名
  5. 《线性代数及其应用》
  6. jdk 取整数_JDK 15中的确切绝对整数
  7. stackoverflow_Stackoverflow:您尚未发现的7个最佳Java答案
  8. java创建一个不可变对象_使用不可变对象创建值对象
  9. amber 口译_口译员设计模式示例
  10. drools6.5_Drools 6.2.0.Final发布