我正在使用Java制作游戏,其中该游戏中的许多事件都是基于时间的。游戏引擎为我可以更新所有内容的所有实体都有一个act方法。截至目前,每个具有基于时间的事件的对象都有一个整数计数器,每次调用时都会调用++。我的问题是,如果我要拥有数百个实体,是否值得为单例添加一个全局计数器并让每个对象使用它或增量整数然后将它们设置回零而不是一直这么大的交易?还有一种更好的方法来计算时间而不是递增整数吗?
答案 0 :(得分:1)
你的问题有点令人困惑,但我想我知道你的意思。你应该使用Game loop.这基本上意味着你应该在你的游戏类中有两个主要方法。这将是传统的方法:
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(){}
}