簡體   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