#java #2d-games
#java #2d-игры
Вопрос:
Я создаю игру с использованием Java, где многие события в этой игре основаны на времени. В игровом движке есть метод act для всех объектов, где я могу все обновить. На данный момент у каждого объекта, имеющего события, основанные на времени, есть целочисленный счетчик, который вызывается каждый раз, когда вызывается действие. Мой вопрос в том, что если у меня будут объекты в сотнях, стоит ли добавлять глобальный счетчик к одноэлементному элементу и позволять каждому объекту использовать это или увеличивать целые числа, а затем постоянно возвращать их к нулю, не будет такой большой проблемой? Также есть ли лучший способ подсчета времени, чем увеличение целых чисел?
Комментарии:
1. Используйте таймер или класс Swing Timer .
2. @PM77-1 Ага. что? Использовать таймер реального времени для игры ? Я не согласен. Он должен использовать игровые циклы.
Ответ №1:
Ваш вопрос немного сбивает с толку, но я думаю, что понимаю, что вы имеете в виду. Вы должны использовать игровой цикл.Это в основном означает, что у вас должно быть два основных метода в вашем игровом классе. Это был бы традиционный способ сделать это:
class Game{
List<Entity> entities;
//your "act" method
public void update(){
for(Entity e : entities){
e.update();
}
}
public void draw(Graphics2D g){
for(Entity e : entities){
e.draw(g);
}
}
}
Но чтобы ответить на ваш вопрос, поскольку вы используете события, основанные на времени, возможно, вы могли бы сделать это вместо этого:
class Game{
private List<Entity> entities;
private int time = 0;
//your "act" method
public void update(){
for(Entity e : entities){
e.update(time);
}
time ;
}
public void draw(Graphics2D g){
for(Entity e : entities){
e.draw(g);
}
}
}
И для каждого объекта просто используйте прошедшее время. Вам не нужно его сбрасывать. Например, если вы хотите, чтобы объект делал что-то каждые 300 кадров, вы могли бы сделать это:
class Dog{
public void update(int time){
if(time % 300 == 0){
bark();
}
}
public void draw(Graphics2D g){}
public void bark(){}
}
Комментарии:
1. Спасибо! На самом деле я уже настроил его так, я не знаю, почему я раньше не думал об использовании modulo!
2. Теоретически вы можете переполниться
time,
.