javafx中的tree
这是有关使用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中的tree