2013-04-18 50 views
0

標題不是很清楚,但我不知道如何制定它。所以隨時提出一個新的標題。每個對象應該處理自己的渲染,還是應該由一個獨立的類來處理所有的渲染?

我目前正在使用Slick2D庫在Java中進行遊戲。首先,我正在處理主類的render()函數中的所有渲染。但即使只有一些物體,我發現這變得非常混亂。

短採樣,雖然原代碼有一點渲染:

g.setBackground(Color.darkGray); 
    g.setColor(Color.black); 
    g.fillRect(0, 0, gc.getScreenWidth(), 128);        //draw top UI 
    g.fillRect(0, 128, gc.getScreenWidth(), 512, sky, 8, 512);    //draw background 
    g.fillRect(0, 720 - 128, gc.getScreenWidth(), 128, ground, 128, 128); //draw ground 
    g.drawImage(charSprite, charX, charY);         //draw character 
    g.drawImage(weaponSprite, weaponX, weaponY);       //draw weapon 

    for (firedArrows arrow : Arrow) { 
     g.drawImage(arrowSprite, arrow.getPosX(), arrow.getPosY)   //draw all arrows 
    } 

所以,我現在已經切換成每個對象渲染本身。 在主要的render()函數中,我將調用方法level,它依次渲染關卡中的對象並調用render()函數。

Main.render()=> level.render()=>渲染水平

      => character.render() => render character 
               => weapon.render() => render weapon 
         => monsters.render() => render monsters 

等等等等。

這兩種方法哪一種更好,爲什麼? 或者可能有第三種方法是首選?

+0

一般來說,OOP會指向第二種形式,因爲每個類都應該處理它的責任。但是也許你的例子非常簡單,它並不是真的需要。需要注意的是,不要將模型類與UI實現混合使用,因此您可以輕鬆更改UI而無需觸摸模型。 – SJuan76

+0

目前,它很簡單。但我一定會擴大比賽。也許添加粒子生成器,以及什麼。 用戶界面未來也會在GUI類中處理。 謝謝你的迴應! –

+0

我會說兩個。每個對象都應該負責自己的繪畫,但是它應該只在中央重繪引擎指示的情況下這樣做,這樣可以防止對象在自己的序列中繪製或更新遊戲數據 – MadProgrammer

回答

0

「正確」的OO設計恕我直言,將解除領域模型對象從渲染器。 Bridge和/或Visitor模式可能適用於此處。