繁体   English   中英

每秒多次调用许多对象的许多方法

[英]Calling many methods of many objects many times per second

我有这样的结构

  abstract Class Entity {
    //some variables... 
    //some methods ...
    public abstract void render(Graphics g);
    }

那是父母..现在我有3个孩子..

Class A extends Entity{}
Class B extends Entity{}
Class C extends Entity{} 

每个类都有一些不同的东西做渲染。例如,绘制黄色圆圈,第二个绿色文本,第三个是显示图像。

但是......有一件事。

Class A have List<B>... 
Class B have List<C>... 

一个实体有例如10个B ...每个B有20个C ...所以现在..我有一个渲染方法,每秒渲染60x ..我必须从每个对象调用每个渲染方法。

所以我有这样的事情

for(A a : listOfAs){
   for(B b : listOfBs){
      for(C c : listOfCs){
         c.render(g);
      }b.render(g);
   }a.render(g);
}

现在,如果你想象我有更多这样的对象,我称这种方法每秒60次......我发现这真的......真的很糟糕...我不知道如何更好地解决这个问题......我不要认为每个循环的这个实际上是最好的解决方案。 任何想法?

我正在考虑像这样实施这个孩子:

Entity x = new A(); ... 
Entity y = new B(); ... 

所以但是有些类有其他方法必须像那样循环,我不能从父级调用它们。

对于渲染方法......只要坚持一个事实,你必须在很短的时间内多次循环一段时间。

我无法通过这个...我被困在这里很长一段时间,我不知道如何解决这个问题。

由于您的主要关注点似乎是渲染或不渲染某些实体,无论它们是否为子实体,您都应该对一般图形编程优化和技巧以及渲染引擎为提高性能所做的工作进行一些研究。 渲染引擎的性能大幅提升并不是不必要的工作。

已经提到过一个,即确定哪个实际改变状态并仅渲染它们。 另一种方法是根据图形画布上每个实体的边界检查视图的边界,并仅渲染边界内的内容。 无论您是2D还是3D,都可能会使事物重叠,因此您可以确定哪些实体被遮挡并避免渲染它们。 如果您的子实体位于父级的边界内,则可以避免渲染对象图的整个树,并避免迭代许多元素。

此外,这些事情可以通过检查必须重新渲染的实体的一部分,未被遮挡的部分等来部分地完成。这可能需要对API进行一些更改以传入预期实体的边界。为每个项目渲染而不是整个图形上下文。

如果你不知道任何关于任何可渲染实体的信息,比如脏状态或边界,那么你就不得不迭代它们并且每个都调用渲染一个。

我不确定我是否会遵循...但你是否正在制作一个由其他几个实体组成的实体? 无论你多么想到这一点,你总是必须访问每个实体一次。 你选择什么样的循环并不重要。

但是,如果你有一个由一堆精灵组成的实体,我建议创建一个新的纹理并将这些精灵渲染到该纹理上一次。 然后你只需要在每帧渲染纹理。 说得通?

我找到了一位工作的朋友,他看了看它并帮助我稳定了它。 谢谢大家的提示和帮助。 我不认为lambdas在这里可以提供很多帮助。

我很难解释我在这个项目中做了什么。 它根本不是游戏......它有所不同。 我有双重渲染,所以每秒真的是2 * 30次。 我只是在玩我以后可以在我的引擎中使用的物体。 但是这个问题让我陷入了困境。

再次。 谢谢你们 。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM