javafx中的tree_JavaFX中的塔防(4)

javafx中的tree

好的,到目前为止,我们已经创建了一个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可以删除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

javafx中的tree

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

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

相关文章

PoE交换机的好处,你真的知道吗?

电气设备需要通电才能工作,一些基于IP网络的各种设备也同样需要供电才能使用,比如说路由器、摄像头等,当然啦,自从有了PoE供电技术后,IP网络设备就又多了一种供电方式。那么,对于PoE交换机的好处你是否了解…

[渝粤教育] 广东-国家-开放大学 21秋期末考试服务标准化10011k1

1、采用国际及国外先进标准时,表示“等同采用”的代号是?(2 分) A.MOD B.NEQ C.ISO D.IDT 2、从命名规则上判断,GB/Z 30556.1-2017《电磁兼容 安装和减缓导则 一般要求》…

浅谈工业无线遥控器的基本定义及原理

基本定义 工业无线遥控器是专门用来控制工程机械或工业设备的远程无线遥控装置。主要用于冶金、造船及集装箱码头、仓储、机械制造、化工、造纸、建筑和工程机械等使用起重机械并使之实现遥控操作的行业。其有效控制范围为半径100米的任何方位且不受障碍物的影响,操…

招远西苑学校计算机老师,招远市西苑学校积极开展综合实践活动

水母网6月24日讯(通讯员 邵尊亮)近日,西苑学校初二级部组织学生分赴招远市综合实践学校,开展了以“提高意识、投入实践、挖掘潜力”为主题的综合实践活动。本次活动包括体能拓展、创意搭建、衍纸工艺、烘焙工艺等课程。综合实践学校的老师们精心准备&…

Spring MVC注释

介绍&#xff1a; 从Spring 2.5开始&#xff0c;我们可以使用注释来标记我们的Spring组件。 一种方法是在我们的appConfig.xml中使用<component-scan>标记&#xff1a; <context:component-scan base-package"com.programmergirl" />然后&#xff0c;S…

电源模块是电源吗?

我们平时用的充电器或电池等供电装置到底是不是电源呢&#xff1f;首先让我们来看一下电源的定义&#xff1a;电源就是把其他形式的能量转化成电能的装置。即&#xff1a;电源是提供电能的装置。因为它可以将其它形式的能转换成电能&#xff0c;所以我们把这种提供电能的装置叫…

[渝粤教育] 广东-国家-开放大学 21秋期末考试管理会计10171k2

1、下列项目中&#xff0c;变动成本法下计入产品成本的是( )。 &#xff08;2 分&#xff09; A&#xff0e;变动性制造费用 B&#xff0e;变动性管理费用 C&#xff0e;固定性管理费用 D&#xff0e;固定性制造费用 2、将成本中心划分为标准成本中心和费用中心的分类依据是&am…

浦发银行计算机笔试题库,2018浦发银行校园招聘笔试试题库

原标题&#xff1a;2018浦发银行校园招聘笔试试题库银行招聘网(http://www.jinrongren.net/)提醒&#xff1a;2018浦发银行校园招聘公告已经发布啦&#xff0c;共招聘2152人&#xff0c;公告中明确表明柜员岗专科以上就可以报考&#xff0c;专业不限&#xff0c;也并未对英语四…

浅析二层工业交换机的特点

二层交换技术的发展比较成熟&#xff0c;二层工业交换机属数据链路层设备&#xff0c;可以识别数据包中的MAC地址信息&#xff0c;根据MAC地址进行转发&#xff0c;并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。那么&#xff0c;二层工业交换机的特点有哪些呢&am…

[渝粤教育] 广东-国家-开放大学 21秋期末考试财政学10573k1

1、&#xff08; &#xff09;研究人们如何借助于经济制度&#xff0c;最大限度地利用稀缺的资源来最好地达到配置效率与分配公平两大经济目标。&#xff08;2 分&#xff09; A&#xff0e;财政学 B&#xff0e;政治经济学 C&#xff0e;现代经济学 D&#xff0e;金融学 2、财…

单片机、ARM、DSP与CPU之间的关系大揭秘

你知道单片机、ARM、DSP都是CPU吗&#xff0c;它们之间又有什么不同&#xff0c;小编进行了整理和编辑。 CPU&#xff1a;中央处理器 CPU 包括运算逻辑部件、寄存器部件和控制部件等&#xff0c;其本质就是一个集成电路&#xff0c;实现的功能就是从一个地方读出一个指令&…

物联网技术系列之3分钟了解无线MESH网络

今天来聊聊无线MESH网络的&#xff0c;开始之前&#xff0c;先说一句&#xff1a;“无线MESH网络是个好东西&#xff01;” 要说无线MESH网络&#xff0c;首先从我们都熟悉的无线网络说起。 无线网络相信在座的各位一定一点儿也不陌生&#xff0c;现在它已经融入到我们生活的…

【渝粤教育】 广东开放大学 10548_金融学k1_21秋考试

1、世界上最早的保险市场是&#xff08; &#xff09;年伦敦开设的专门提供保险交易的皇家交易所。&#xff08;2 分&#xff09; A&#xff0e;1668年 B&#xff0e;1568年 C&#xff0e;1558年 D&#xff0e;1548年 2、商业银行的超额准备金率越高&#xff0c;则货币乘数&…

工业交换机故障分析的原则

由于工业交换机故障现象多种多样&#xff0c;没有固定的排除步骤&#xff0c;而有的故障往往具有明确的方向性&#xff0c;一眼就能识别得出。所以只能根据具体情况具体分析了&#xff0c;为了使的排障工作有章可循&#xff0c;我们可以在分析工业交换机的故障时&#xff0c;按…

深圳大学计算机课程表2018,深圳大学国际交流学院2017—2018学年第1学期本科生课程表...

深圳大学国际交流学院2017-2018学年第1学期本科生课程表(一)主选班级&#xff1a;2017级汉语言文学1班上课时间&#xff1a;2017年9月5日至2018年1月5日课程及地点 上课时间周一周二周三周四周五上午08:30~10:00(1-2节)初级汉语口语(1) 周永强B205初级汉语听力(1) 李艳 B205初级…

参数化测试 junit_参数化的JUnit测试

参数化测试 junit有时&#xff0c;您会遇到一个问题&#xff0c;就是尖叫使用“参数化”测试&#xff0c;而不是多次复制/粘贴相同的方法。 测试方法基本上是相同的&#xff0c;唯一改变的是传入的数据。在这种情况下&#xff0c;请考虑创建一个利用JUnit中的“ Parameterized …

NB-IoT在智慧烟感解决方案中的应用

火灾无疑是人员安全和公共财产的最大威胁之一&#xff0c;近年来独立烟感越来越多&#xff0c;但由于独立烟感产品功能单一&#xff0c;只能发出声光报警&#xff0c;存在一定局限性。随着全国NB-IOT技术的成熟&#xff0c;新的智慧烟感解决方案呼之欲出。 传统独立烟感的缺点 …

【渝粤教育】 广东开放大学21秋期末考试基础会计10258k2

单项选择题 1、清查范围广&#xff0c;内容多&#xff0c;花费的时间长是&#xff08;&#xff09;的特点。 &#xff08;2 分&#xff09; A&#xff0e;局部清查 B&#xff0e;全面清查 C&#xff0e;不定期清查 D&#xff0e;定期清查 2、在实际工作中&#xff0c;可能会因…

【Mybatis】

mybatis 1.配置文件实现增删改查介绍1.1第一步 环境准备1.2 第二步 查询所有数据1.2.1 步骤1&#xff1a; 编写接口方法1.2.2步骤二&#xff1a; 编写SQL语句1.2.3步骤三&#xff1a; 编写测试方法1.2.4 起别名解决上述问题1.2.5 使用resultMap解决上述问题 1.3 参数占位符1.4 …

盘点物联网的4个认知误区

误区一 把传感网或RFID网等同于物联网。事实上传感技术也好、RFID技术也好&#xff0c;都仅仅是信息采集技术之一。除传感技术和RFID技术外&#xff0c;GPS、视频识别、红外、激光、扫描等所有能够实现自动识别与物物通信的技术都可以成为物联网的信息采集技术。传感网或者RFI…