如何在阿里云上做网站备案,WordPress自适应播放器代码,1688阿里巴巴首页,沈阳世纪兴网站建设javafx中的tree好的#xff0c;到目前为止#xff0c;我们已经创建了一个TileMap#xff0c;将其显示在屏幕上#xff0c;并使其在第一部分中可编辑。 在第二部分中#xff0c;我们使用A *算法实现了攻击路径的计算#xff0c;并使敌人跟随该路径。 在第三部分中#xf… 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.htmljavafx中的tree