JavaFX中的塔防(4)

好的,到目前为止,我们已经创建了一个TileMap,将其显示在屏幕上,并使其在第一部分中可编辑。 在第二部分中,我们使用A *算法实现了攻击路径的计算,并使敌人跟随该路径。 在第三部分中,我们创建了一些自定义的TileSetAnimations,以便我们可以将Insectoids围绕它们的中心旋转一个角度。 然后,我们将其应用于Insectoids,以便它们在飞行时会向前看,并朝向转塔,因此它们始终会瞄准最接近的目标。 是时候让炮塔向敌人射击了。

首先,我们需要使用TileSets进行爆炸,并需要使用Pellet枪的子弹。 我在这里找到了一个不错的免费爆炸片。 它比Sprite更大(128 * 128),并且爆炸没有在中心开始,但是在摆弄相对于爆炸类昆虫的位置后,效果很好。 我自己创建了子弹,我知道我必须想出更好的东西:-),但是至少它在屏幕上可见。 摆弄正确的初始位置后,我创建了BulletLaunching行为:

new SpriteBehavior() {
@Override
public boolean perform(Sprite sprite) {
double angle = rotateAnimation.getAngle();
double xVelocity = Math.cos(Math.toRadians(angle));
double yVelocity = Math.sin(Math.toRadians(angle));
final double centerX = x + (width / 2);
final double centerY = y + (height / 2);
double startX = centerX + (xVelocity * (width / 2)) - 4;
double startY = centerY + (yVelocity * (height / 2)) - 4;
Sprite bullet = new Sprite(getParent(), shoot, "bullet" + (bulletCounter++), startX, startY,
8, 8, Lookup.EMPTY);
bullet.setVelocityX(xVelocity);
bullet.setVelocityY(yVelocity);
// add bullet behaviorreturn true;
}@Override
public long getEvaluationInterval() {
return 2000000000; //To change body of generated methods, choose Tools | Templates.
}
});

大部分代码都在计算初始位置,并确保子弹朝正确的方向前进。 现在我们需要添加一些碰撞检测。 一些系统确实具有集中式碰撞系统,并允许添加侦听器。 我更喜欢通过行为来再次执行此操作,因为我发现子弹本身会检查它是否击中了东西,这更加自然和直观:

bullet.addBehaviour(new SpriteBehavior() {
private double range = 75;@Override
public boolean perform(Sprite sprite) {
Collection checkCollisions = sprite.getParent().checkCollisions(sprite);
for (Collision collision : checkCollisions) {
if (collision.getSpriteOne() instanceof EnemySprite) {
sprite.getParent().removeSprite(sprite);
((EnemySprite) collision.getSpriteOne()).hit(6);
return false;
} else if (collision.getSpriteTwo() instanceof EnemySprite) {
sprite.getParent().removeSprite(sprite);
((EnemySprite) collision.getSpriteTwo()).hit(6);
return false;
}
}
if (distance(sprite.getX(), sprite.getY(), centerX, centerY) > range) {
sprite.getParent().removeSprite(sprite);
return false;
}
return true;
}
});

我们在这里所做的只是向GameCanvas询问此特定Sprite的碰撞,并在它是敌人的情况下尝试造成伤害。 匿名的内部项目符号Sprite和Behavior将在以后转换为常规类,以使代码更好,并使它们更易于创建和配置。 在敌人精灵的一边,我们需要实现“命中”方法:

public void hit(int impact) {
power = power - impact;
if (power getParent().removeSprite(this);
getParent().addSprite(new Sprite(getParent(), explosionAnimation, "explosion", getX() - 30, getY() - 80, 128, 128, Lookup.EMPTY));
}
}

非常简单:万一命中致命,我们删除Sprite并添加一个爆炸Sprite。 如果精灵大小匹配,我们可以简单地在现有Sprite上设置爆炸动画。 如果可以创建自己的SpriteSheets,则应该这样做,这样会使工作变得更加容易。 ExplosionAnimation配置为仅运行一次,并且它具有EventHandler,一旦完成Animation,该事件处理程序将删除Sprite:

explosionAnimation = new TileSetAnimation(explosion, 100f);
explosionAnimation.setRepeat(1);
explosionAnimation.setOnFinished(new AnimationEventHandler() {
@Override
public void handleEvent(AnimationEvent event) {
Sprite target = event.getTarget();
target.getParent().removeSprite(target);
getParent().removeSprite(EnemySprite.this);
}
});

而已。 我们的炮塔现在将向敌人发射子弹,并试图伤害他们,直到它们爆炸:

在视频中,您还可以看到DebugLayer。 当前,它跟踪一些性能数据,主要是FPS,以及两个脉冲之间的时间是否太长。 我还在屏幕顶部添加了一个项目符号,以直观地检测出卡顿的动画。 您可以放心地忽略...

因此,现在我们几乎拥有了塔防类型游戏所需的一切。 在本教程的下一部分中,我们将为敌人添加伤害指示器,并向HUD添加得分和控件以开始下一波攻击。

在Eppleton博客上,我们的JCG合作伙伴 Toni Epple 参考: JavaFX中的塔式防御(4) 。

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

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

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

相关文章

Two.js – 为现代浏览器而生的 2D 绘图 API

Two.js 是面向现代 Web 浏览器的一个二维绘图 API。Two.js 可以用于多个场合:SVG,Canvas 和 WebGL,旨在使平面形状和动画的创建更方便,更简洁。 Two.js 有一个内置的动画循环,可搭配其他动画库。Two.js 包含可伸缩矢量…

apache arm 交叉编译_MacOS 下交叉编译的折腾笔记

这是这个系列 “折腾笔记” 的第一篇,希望能用更直白的方式去展现交叉编译的时候做了些什么。因此,这个教程并不是最佳实践,但是可以让小伙伴们有一个更直白的理解。之后,我会把笔记的重点放在 bazel 上交叉编译的最佳实践&#x…

python - 使用traceback获取详细的异常信息

try: 1/0except Exception,e: print e 输出结果是integer division or modulo by zero,只知道是报了这个错,但是却不知道在哪个文件哪个函数哪一行报的错。下面使用traceback模块 import tracebacktry: 1/0except Exception,e: traceback.print_exc() 输…

计算机科学研究生规划,2019计算机考研备考:计算机科学与技术研究方向及复习规划...

考研之路永远都不是轻松着度过的,想要在这条道路上稳稳妥妥的走完,并到达设立在远处的目标,了解目标专业的各项考研备考信息是第一步。新东方在线为大家整理了2019计算机考研备考:计算机科学与技术研究方向及复习规划,…

快速的远程服务测试

测试与远程服务交互的代码通常很困难。 有很多折衷因素会影响您可以编写哪些测试以及要编写的测试数量。 在大多数情况下,您对从服务中获取的数据的控制为零,这使得断言至少很难说。 不久前,我使用VCR库针对远程服务编写了一些Ruby测试。 VC…

树-二叉树、满二叉树和完全二叉树

树-二叉树、满二叉树和完全二叉树 二叉树的定义: (1)当n0时,为空树; (2)当n>0时,是由一个根结点和称为根结点的左、右子树构成,并且两颗子树互不相交。 满二叉树&…

Codrops 优秀教程:基于 CSS3 的全屏网页过渡特效

向大家分享一个来自 Codrops 的基于 CSS3 实现的全屏网页过渡特效。页面初始布局是四个盒子,点击其中一个会扩张到全屏,其它的会淡出隐藏;关闭当前视图的时候又恢复到初始状态。 您可能感兴趣的相关文章-prefix-free:帮你从 CSS 前…

上海职称英语计算机取消,小编简析2017年职称英语考试是否取消

近日出台的《关于深化人才发展体制机制改革的意见》(以下简称《意见》)直接提出了我国将改革职称制度和职业资格制度,对职称外语和计算机应用能力考试不作统一要求;探索高层次人才等职称直聘办法。《意见》出台的是2016年职称英语考试前几天,…

elasticsearch 条件去重_elasticsearch 笔记四 之聚合查询之去重计数、基础统计、百分位、字符串统计...

这一节笔记还是聚合查询,以下是本节目录:去重统计 cardinality基础统计 stats百分位 percentiles字符串统计 string_stats1、去重统计 cardinality去重统计,就是统计某个字段的值,去重后的数量。先导入如下数据:PUT /e…

openstack基础环境

主机环境: centos7.5 ip:192.168.2.11 修改主机名,修改后主机名不得再更改 yum install chrony -y (控制节点和计算节点都要装)编辑 vi /etc/chrony.conf 文件,按照你环境的要求,对下面的键进行添加&#x…

Java内存模型又回来了

Java内存模型已经被遗忘了九年多了,但是大多数开放源代码Java支持者都希望对其进行现代化,并专注于并发,因为Java内存模型中引入的过程仅朝现代化迈出了一步 。 一个JEP(JDK增强建议),编号188 &#xff0c…

Redis缓存设计模式与失效策略

大家好,我是升仔 引言 Redis作为一个灵活的键值数据库,广泛用于实现高性能缓存解决方案。理解其缓存设计模式和失效策略对于开发高效、可靠的应用程序至关重要。 缓存设计模式 缓存 aside(旁路缓存): 基本原理:应用…

【Python 19】BMR计算器3.0(字符串分割与格式化输出)

1.案例描述 基础代谢率(BMR):我们安静状态下(通常为静卧状态)消耗的最低热量,人的其他活动都建立在这个基础上。 计算公式: BMR(男) (13.7*体重kg&#xff0…

经典案例:2012年最佳25个响应式网站设计作品《下篇》

2012年,响应式网站设计成为主流,这个概念由著名网页设计师 Ethan Marcotte 在2010年5月份提出,其目标是要让设计的网站能够响应用户的行为,根据不同终端设备自动调整尺寸。 响应式设计不再只是一个概念,众多大公司也把…

发布Akka Toolkit 2.3

最近宣布了Akka工具包 2.3.0版本的发布。 Akka是一个非常有用的工具包和运行时,用于在JVM上构建高度并发,分布式和容错的事件驱动应用程序。 它是分布式的,并提供了Actor,Future和STM等高级抽象。 它的新版本在2.2.0发布之后八个…

npm git 遇到的问题解决笔记

npm 报错 在无可奈何时可以试一试这个命令 npm cache clean --force commit 是如果报这样的错 删掉项目中.git/index.lock文件再commit即可解决问题 1.git config --global user.email xxx163.com 2.git config --global user.name xxx 3.ssh-keygen -t rsa -C xxx163.com(邮箱…

计算机技术应用广泛 属于科学计算方面的是,中国大学MOOC: 计算机技术应用广泛,以下属于科学计算方面的是哪个? 答案:火箭轨道计算...

相关问题端口的作用是什么?基于冰山模型的人才选拔模式,在应届生招聘、员工晋升等工作中都会应用,以下属于冰山模型中提到的考察因素的是创意的结果和过程不一定能够准确面对商业应用,创新则更需要( )和( )的保障。: 创意 结果 过…

新风系统风速推荐表_新风系统风速标准及与噪音的关系

原标题:新风系统风速标准及与噪音的关系如今,新风系统不仅能够对室内空气进行净化,还能够为室内提供源源不断的新鲜空气,真可谓空净产品的实力担当。新风系统不同于其它空气净化设备,只有进行合理的选择安装才能够更好…

Docverter – 文本文件轻松转换为 PDF,Docx 和 ePub 文件

Docverter 让你无需建立自己的文档转换工具就能够进行文件转换。Docverter 包装了几个开源项目,使您的文档能够进行完美的转换。借助一个简单的 HTTP API ,把使用 HTML,Markdown, 或者 LaTeX 编写的纯文本文件转换为 DOCX,PDF&…

MoreUnit与MoreUnit

就在一年多以前,我写了一篇关于在Eclipse中使用JUnit的文章。 评论者之一推荐MoreUnit ,以进一步提高测试效率。 尝试一下让我感到很高兴,并且我的自主神经系统立即记住了该插件的键盘快捷键…… 另外,在使用MoreUnit一段时间后&…