Прошить прямоугольник в JavaFX - PullRequest
0 голосов
/ 03 мая 2018

Как сделать так, чтобы прямоугольник вспыхнул и исчез из поля зрения в JavaFX.

Я занимаюсь поиском слов, и у меня есть двумерный массив рандомизированных chars. Я печатаю этот массив на холст 600x600, например:

for (int i = 0; i < gameBoard.length; i++) {
        for (int j = 0; j < gameBoard[0].length; j++) {
            gc.fillText(String.valueOf(gameBoard[i][j]), (25 + (20 * j)), (25 + (20 * i)));
        }
    }

У меня также есть квадрат, нарисованный на том же холсте, примерно так:

    gc.setFill(Color.BLACK);
    gc.fillRect((24 + (20 * colSelection)), (14 + (20 * rowSelection)), 15, 15);

означает, что я могу перемещать квадрат, увеличивая rowSelection и colSelection. Это дает: this.

Теперь единственная проблема заключается в том, что мне нужно, чтобы прямоугольник вспыхнул, чтобы буква внизу все еще была видна при выборе. Как я могу это сделать? Я попытался установить непрозрачный цвет, но это также приводит к тому, что остальная часть игрового поля становится невидимой. Есть ли способ сделать это, я не могу придумать? Я новичок в JavaFX, поэтому любая помощь приветствуется.

1 Ответ

0 голосов
/ 03 мая 2018

Используйте save() и restore(), чтобы изменить цвета обратно на старые значения или восстановить старые значения, установив свойства на старые значения самостоятельно.

Самый простой способ добавить белый текст на черном фоне:

  1. установите fill на черный
  2. Нарисуйте прямоугольник
  3. установите fill на белый
  4. нарисуйте текст

Если в вашем случае это невозможно, вы можете нарисовать белый фон перед рисованием текста и использовать DIFFERENCE в качестве режима наложения, чтобы позже нарисовать белый прямоугольник поверх текста, который инвертирует цвета в прямоугольнике:

Canvas canvas = new Canvas(400, 400);
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setFill(Color.WHITE);
gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
gc.setFill(Color.BLACK);
gc.fillText("Hello world", 30, 30);
gc.save();
gc.setGlobalBlendMode(BlendMode.DIFFERENCE);
gc.setFill(Color.WHITE);
gc.fillRect(10, 10, 100, 100);
gc.restore(); // restore old settings

// some more rendering with old settings
gc.fillRect(100, 100, 100, 100);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...