Это часть 5 этого постоянного руководства по созданию игры Tower Defense в JavaFX с использованием FXGameEngine . Теперь враги летят на пути атаки к цели, а турели целятся и стреляют в них. Итак, самые важные части есть, но все еще не хватает многих деталей. Игра просто начинается и не дает нам возможности подготовиться к следующей волне. Это не показывает счет (фактически нет никакого счета). Волна никогда не заканчивается, и вы не можете выиграть или проиграть. Поэтому нам нужно добавить немного игровой логики, HUD и Controls. Нам также нужно увидеть статус повреждений врагов. Последняя особенность — это функция, о которой мы позаботимся в этой части урока.
StackedRenderer
Итак, начнем со статуса Врага. Мы могли бы добавить их в дополнительный слой HUD, так как это то, для чего предназначен HUD, но я готовлюсь сделать это через Renderers. У каждого спрайта есть один текущий рендер. Вы можете переключать Renderers, и это то, что делают SpriteActions (мы рассмотрим их в другом учебнике), но вы все равно можете иметь только один активный Renderer одновременно. В нашем EnemySprite это анимация LookAheadTileSetAnimation. Чтобы разрешить комбинацию визуализаторов, вы можете использовать класс StackedRenderer. Это позволяет вам размещать неограниченное количество рендеров и просто делегировать им при каждом вызове метода.
Таким образом, мы можем создать простой HealthBarRenderer и использовать это:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
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:
1
2
|
final TileSetAnimation tileSetAnimation = new LookAheadTileSetAnimation(enemy1, new int []{ 0 , 1 , 2 , 3 , 4 , 5 }, 10f); final StackedRenderer stacked = new StackedRenderer(tileSetAnimation, new HealthBarRenderer()); |
И вот что мы получаем:
В следующей части мы добавим HUD.
Ссылка: | Защита башни в JavaFX (5) от нашего партнера JCG Тони Эппла в блоге Eppleton . |