JavaFX中的塔防(5)
这是本使用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)相关推荐
- JavaFX中的塔防
我想长时间使用我的游戏引擎来编写<塔防>游戏,但是由于另一个小组努力创建JavaFX<塔防>游戏,所以我认为我宁愿创建另一款游戏. 从邮件列表中,我了解到不再开发其他游戏. 因 ...
- JavaFX中的塔防(2)
在上一部分中,我们创建了一个简单的编辑器,让我们放置炮塔. 现在,我们将在敌人起源的地方添加一个生成点,并为其定义攻击目标. 首先,我将通过对象层向地图添加更多信息. 这是标准的TMX,因此我们可以在 ...
- JavaFX中的塔防(3)
在最后一部分中,您了解了如何创建Sprite,为其设置动画并赋予其Behavior. 但是动画效果不是很好,因为作为Insectoid,您应该始终看起来在飞行中. 记住:安全第一! 我们可以通过创建自 ...
- JavaFX中的塔防(6)
因此,我们已经在本教程的第6部分中,与此同时,游戏也取得了长足的进步. 在这一部分中,我们最终将添加一个显示得分的图层,已达到目标的敌人数量,启动下一个Wave的按钮以及用于购买新炮塔的资金. 说到钱 ...
- JavaFX中的塔防(4)
好的,到目前为止,我们已经创建了一个TileMap,将其显示在屏幕上,并使其在第一部分中可编辑. 在第二部分中,我们使用A *算法实现了攻击路径的计算,并使敌人跟随该路径. 在第三部分中,我们创建了一 ...
- javafx中的tree_JavaFX中的塔防(4)
javafx中的tree 好的,到目前为止,我们已经创建了一个TileMap,将其显示在屏幕上,并使其在第一部分中可编辑. 在第二部分中,我们使用A *算法实现了攻击路径的计算,并使敌人跟随该路径. ...
- javafx中的tree_JavaFX中的塔防(5)
javafx中的tree 这是有关使用FXGameEngine在JavaFX中创建塔防游戏的本教程的第5部分. 敌人现在飞向目标的攻击路径,炮塔瞄准并射击. 因此,最重要的部分在那里,但是仍然缺少许多 ...
- javafx中的tree_JavaFX中的塔防
javafx中的tree 我想长时间使用我的游戏引擎来编写<塔防>游戏,但是由于另一个小组努力创建JavaFX<塔防>游戏,所以我认为我宁愿创建另一款游戏. 从邮件列表中,我了 ...
- javafx中的tree_JavaFX中的塔防(2)
javafx中的tree 在最后一部分,我们创建了一个简单的编辑器,让我们放置炮塔. 现在,我们将在敌人起源处添加一个生成点,并为其定义攻击目标. 首先,我将通过对象层向地图添加更多信息. 这是标准的 ...
最新文章
- pythonista3使用教程-pythonista3都能做什么
- Android的下载,编译, 运行
- ModuleNotFoundError: No module named 'mpl_toolkits.basemap'
- [linux]centos7下解决yum install mysql-server没有可用包
- .NET 之路 | 007 详解 .NET 程序集
- C++项目库包含,dll引用问题,直接把缺失的dll或库放置可执行文件里
- 【渝粤题库】广东开放大学社会学概论形成性考核
- 【Tools】ubuntu16.04升级Python2.7到3.5
- Oracle 11g数据库详细安装步骤图解
- jsp和mysql的乱码问题_jsp和servlet操作mysql中文乱码问题的解决办法
- sql进程意外终止_字节跳动五面都过了,竟然意外被刷了下来,问了hr原因竟说是。。。。。...
- tornado celery mysql_tornado中使用celery实现异步MySQL操作
- R可能让您惊喜的10件事
- Eclipse—在Eclipse中如何发布创建的JavaWeb工程
- Unix/Linux环境C编程新手教程(40) 初识文件操作
- 数据结构PTA期末复习题集
- mysql数据库双机备份_配置MySQL数据库双机热备份(转)
- (一)一文掌握flink性能优化:资源配置调优
- web前端培训—css源码笔记(二)【爱创课堂】
- 商品服务 - 销售属性维护,属性分组与属性关联
热门文章
- EasyExcel(笔记)
- Ubuntu下C++代码调用可执行文件。
- Mysql字符串截取 mysql将字符串字段转为数字排序或比大小
- 本地方法(JNI)——编码签名
- 《线性代数及其应用》
- jdk 取整数_JDK 15中的确切绝对整数
- stackoverflow_Stackoverflow:您尚未发现的7个最佳Java答案
- java创建一个不可变对象_使用不可变对象创建值对象
- amber 口译_口译员设计模式示例
- drools6.5_Drools 6.2.0.Final发布