Конспектзанятия №3
Игровойцикл
Каждой игре нуженигровой цикл, иначе не будет никаких изменений, будет просто неподвижноеизображение.
Задача:добавить счетчик кадров в секунду.
Уберем метод repaint()– перекраска из всех вызовов, и пропишем его в методе рисования. Этот блок кодаявляется циклом. Изменений в проекте не будет.
Работаем в классе GamePanel.Добавим переменную private int frames = 0;
(frames – кадры).
Начнем ее считатьв методе рисования. frames++;
Добавим какой –нибудь тип проверки, который будет проверять сколько кадров 2 секунды.
Пропишемусловиеif(System.currentTimeMillis()-lastCheck >= 1000){
(System.currentTimeMillis())— возвращает время в миллисекундах
1сек = 1000мс
Затем,какой время было при проверке lastCheck.
Послепроверяем >= 1000.
Условие:если с момента последней проверки кадра прошла одна секунда, мы выполняем новуюпроверку кадров. Сохраните новую проверку кадров в секунду как последнююпроверку в секунду и повторите.
Добавим последнююпроверку как глобальную переменную.
privatelong lastCheck = 0;
Long– это самая большая с точки зрения размера переменная (8 байтов памяти). Онаможет принимать значения от -9223372036854775808 до 9223372036854775807.
В условии пропишем,что последняя проверка равна текущему времени.
lastCheck= System.currentTimeMillis();
Выведем подсчеткадров в консоль.
System.out.println(FPS:+ frames);
Запустим.В итоге у нас примерно около 1000 кадров в секунду.
Следующее,что мы сделаем: добавим визуальныеэффекты для нашего прямоугольника, чтобы он перемещался без нашего участия.Продолжаем работать в классе GamePanel.
Добавим метод вметоде перерисовке updateRectangle() — обновить прямоугольник. Создадимэтот метод.
Вметоде пропишем xDelta,yDelta.
Прямоугольник унас исчез.
Добавим переменныеxDir(направлениепо x),xDir(направлениепо y).
privateint xDir = 1, yDir = 1;
В методеобновления прямоугольника добавим условие:
if(xDelta> 400 || xDelta < 0)
{
xDir*= -1;
}
Если xDelta больше ширины (высоты) окна или xDelta меньше 0, то xDir меняетнаправление на обратное (1*-1 = -1, -1*-1 = 1).
Сделаем все то жесамое для yDelta. x*= y
x = x*y
Запустим.Прямоугольник двигается по диагонали.
Замедлим движение прямоугольника.Поменяем тип int на тип float (числа с плавающей точкой).
private float xDelta =100, yDelta = 100;
private floatxDir = 1, yDir = 1;
float: хранитчисло сплавающейточкой от-3.4*1038 до3.4*1038 и занимает4 байта.
В методе рисованияпрямоугольника будет ошибка, так как он принимает только тип int,поэтому сделаем преобразование.
g.fillRect((int)xDelta,(int)yDelta, 200, 50);
Изменим значения xDir,yDir.
private float xDir =0.01f, yDir = 0.01f;
Запустим.
Добавим большецветов.
g.setColor(newColor(150,20,90)); — новыйкомпозитный цвет.
Импорт пакета сцветом.
Запустими посмотрим какой цвет получим.
Теперь,мы сделаем так, чтобы прямоугольник менял цвет при смене направления.
Сохраним наш новыйцвет в глобальной переменной.
private Color color = newColor(150,20,90);
Объявимэту переменную.
Сделаем цветслучайным, для этого создаем новый метод.
color= getRndColor(); — Создать метод
Создадим случайныйобъект.
private Random random;
random= new Random();
Импорт пакета с Random.
И с помощью этогослучайного объекта мы можем получать случайные числа.
random.nextInt(255);— диапазон цвета 0-255.
Нам нужно сделатьто же самое для yDelta.
Запустим.
