Это часть 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 {@Overridepublic boolean prepare(Sprite sprite, long time) {return true;}@Overridepublic 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 . |