【问题标题】:Handling graphics in OOP style以 OOP 风格处理图形
【发布时间】:2009-06-12 23:43:37
【问题描述】:

在面向对象的编程风格中,人们倾向于如何处理图形?每个对象都应该包含自己的图形信息吗?这些信息是如何显示的?

我制作图形程序的经验有限,但我倾向于让对象和图形只是松散相关。例如,如果我实现了一个国际象棋游戏,我倾向于有一个图形对象负责制作棋盘,获取棋子的图像,将它们加载到附加到诸如 White_Queen 之类的名称的哈希中,然后在情况发生变化时更新屏幕.更改本身将从对象传递到主游戏循环,然后传递到图形对象。片对象将在字符串中包含它们所附加的片图形的名称,但其中不包含任何图形信息。这是面向对象吗? OOP 好吗?

我现在正在考虑的是,由于我正在处理的项目涉及程序生成的图形(非常非常简单的图形),我可以将程序存储在对象中并让图形对象从对象中读取程序传递给它。这会是 OOP 吗?会好吗?

据我所知,在现实世界中,事物不包含图形。事物包含属性,我的大脑会解释它们。盲人的大脑和鹰的大脑对不同的物体都有不同的解释。这是面向对象吗?我应该尝试这样做吗?

嘿,一如既往地感谢您的帮助!

z.

PS 我正在为任天堂 DS 编写 C 代码。我正在通过单独着色像素来绘制图形!

【问题讨论】:

    标签: c oop graphics coding-style


    【解决方案1】:

    您有几个问题合二为一。希望这会有所帮助。

    每个对象都应该包含自己的图形信息吗?这些信息是如何显示的?

    程序员倾向于区分术语“图形”和“图形用户界面”(GUI)。通常图形是指静态图像(如照片)或动态图像(如视频游戏),而 GUI 是指您在应用程序中看到的正常事物,如窗口、按钮或菜单。您指的是图形还是 GUI?

    在您的程序和在您的显示器上获取图像之间有几个抽象层。在 Windows PC 上,它通常归结为调用 Win32 或 DirectX 函数,它们处理所有最底层的东西。

    我可以将过程存储在对象中,并让图形对象从传递给它的对象中读取过程。

    您不应将主要功能放在图形代码中,反之亦然。保持它们的区别。这使得改变棋子在国际象棋游戏中的外观变得更加容易,或者在不改变用户界面的情况下修改规则。

    正如 Alex Martelli 所提到的,MVC 架构是将业务逻辑(它的工作方式)与应用程序的呈现方式(它的外观)分开的好方法。在 MVC 中,视图通常被认为是持有 GUI,它可能有也可能没有“图形”。

    这是面向对象的吗? OOP 好吗?

    在我看来,您需要更好地掌握面向对象设计的含义。由于这个话题有很多外部资源,我建议你谷歌一下。与此同时,也许你应该尝试不同的游戏编程方式,而不是担心它是否是好的设计。您可以弄清楚什么效果好,什么效果不好 - 您不需要第一次就完美!

    据我所知,在现实世界中,事物不包含图形。

    在形而上学的层面上,我想你是对的……我们所看到的只是我们周围事物的一种表现,即光子撞击我们的视网膜产生的电信号。当您编写程序时,您只是在尝试生成对人们有意义的图像。我不太确定你可以用这个去哪里。

    我正在通过单独着色像素来绘制图形!

    使用一些图形库为您处理这些东西不是更容易吗?这样你就可以只做 DrawCircle() 之类的事情,而不是自己做所有的像素。也就是说,通过实现自己的低级图形库,您可以学到很多东西……请记住,您将花费大量时间在库上,而不是在游戏本身上。

    【讨论】:

      【解决方案2】:

      Model-View-Controller (MVC) 是 OOP 中一种流行的图形(和其他表示信息)排列方式。作为模型的对象携带信息,但不处理表示;作为视图的对象显示该信息(例如,以图形方式)。我指向的维基百科条目,以及您可以搜索的许多其他页面,将为您提供更多信息!

      【讨论】:

        猜你喜欢
        • 2016-11-07
        • 1970-01-01
        • 1970-01-01
        • 2010-09-27
        • 1970-01-01
        • 2010-12-26
        • 2023-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多