2009-06-12 84 views
1

在面向對象的編程風格中,人們傾向於如何處理圖形?每個對象是否應該包含自己的圖形信息?這些信息如何顯示?處理OOP風格的圖形

我的製作圖形程序的經驗是有限的,但我傾向於讓對象和圖形只有鬆散的關係。例如,如果我實現了一個國際象棋遊戲,我會傾向於擁有一個圖形對象,負責製作棋盤,獲取棋子的圖像,將它們加載到附加名稱(如White_Queen)的散列中,然後在事物發生變化時更新屏幕。這些更改本身會從對象傳遞到主遊戲循環,然後傳遞到圖形對象。片段對象將包含它們所附帶的片段圖形的名稱,但是不會在其中包含任何圖形信息。這是OOP嗎?這是不錯的OOP?

我現在想的是,因爲我正在處理的項目涉及程序生成的圖形(非常非常簡單的),我可以將程序存儲在對象中,並讓圖形對象讀取程序傳遞給它的對象。這是OOP嗎?它會好嗎?

在現實世界中,正如我所知道的那樣,事物不包含圖形。東西包含屬性,我的大腦解釋它們。盲人的大腦和鷹的大腦都不同地解釋不同的物體。這是OOP嗎?我應該試着這樣做嗎?

嘿,感謝您的幫助照常!

z。

PS我正在爲C編寫任天堂DS的代碼。我通過單獨着色像素來繪製圖形!

回答

1

你有一個問題在一個。希望這會有所幫助。

每個對象都應該包含自己的圖形信息嗎?這些信息如何顯示?

程序員傾向於區分術語「圖形」和「圖形用戶界面」(GUI)。通常,圖形意味着靜態圖像(如照片)或動態圖像(如視頻遊戲),而GUI則是指您在應用程序中看到的正常事物,例如窗口,按鈕或菜單。你是指圖形還是圖形用戶界面?

您的程序和在您的顯示器上獲取圖像有幾個抽象層。在Windows PC上,它通常歸結爲調用Win32或DirectX函數,它處理所有最低層的東西。

我可以將程序存儲在對象中,並讓圖形對象從傳遞給它的對象讀取過程。

你不應該把你的主要功能放在圖形代碼中,反之亦然。保持它們不同。這使得更容易改變棋子在棋牌遊戲中的樣子,或者可以在不改變用戶界面的情況下修改規則。

正如Alex Martelli所提到的,MVC架構是將應用程序呈現(看上去)與業務邏輯分開的好方法。在MVC中,視圖通常被認爲是持有GUI,可能有或沒有「圖形」。

這是OOP嗎?這是不錯的OOP?

這聽起來像你需要更好地掌握面向對象設計的含義。由於這個主題有太多的外部資源,我建議你谷歌它。同時,也許你應該試試並嘗試不同的遊戲編程方式,而不是擔心它是否是好的設計。你可以弄清楚什麼行之有效,什麼不行 - 你不需要第一次就完美!

在現實世界中,正如我已經認識的那樣,事物不包含圖形。

在形而上的層面上,我認爲你是正確的......我們所看到的僅僅是對我們身邊的東西的表徵,即光子照射到視網膜產生的電信號。當你編寫程序時,你只是試圖生成對人們有意義的圖像。我不確定你可以用這個去做什麼。

我通過單獨着色像素來繪製圖形!

使用一些圖形庫來處理這些東西不是更容易嗎?這樣你就可以做像DrawCircle()這樣的事情,而不是你自己做所有的像素。也就是說,通過實現自己的低級圖形庫,您可以學到很多東西......請記住,您將花費大量時間在圖書館而不是遊戲本身上。

1

Model-View-Controller(MVC)是OOP中圖形(和其他表示信息)的流行排列。模型對象攜帶信息,但不涉及演示;作爲視圖的對象顯示該信息(例如,以圖形方式)。我指出的維基百科條目,以及其他許多可以搜索的頁面,都會爲您提供更多信息!