【发布时间】:2011-12-19 04:01:48
【问题描述】:
长期读者第一次海报。请温柔一点。
我热衷于在 VB.net 中创建游戏。作为一个爱好程序员,我免费赠送我的游戏。由于我是一个没有受过正规培训的业余爱好者,因此我会尝试对自己进行正确的编程原则教育,并在编程(例如 OOP)时遵循它们。然而,我显然错过了一些自学成才的事情,如果我接受过正规教育,也许我会知道。
曾经真正困扰我的问题是不同的类(从现在开始称为对象)如何在没有编程特定交互的情况下相互“了解”(请留在我这里......请......)
好吧,想象一下,你有一个太空游戏和以下对象
- clsShip
- clsMissile
- clsAsteroid
- clsSpaceJunk
现在,这些对象中的每一个都有一个 Health、X、Y 和 Z 私有成员和属性,这些成员和属性都从 clsSpaceEntity 继承来作为参数。现在编程它们之间的冲突的一种方法是在主游戏循环中编写以下逻辑
对于舰船列表中的每艘舰船
检查列表中的每个 clsMissile 以查看它是否与它发生碰撞,如果是,则降低生命值
检查列表中的每个 clsAsteroid 以查看它是否与它发生冲突,如果是,则减少健康
检查每个 clsSpaceJunka 列表,看看它是否与它发生冲突,如果是,则降低健康
... 依此类推,每个对象都依此类推
下一个
等等等等……
现在,如果您谈论的是上面的简单示例,这可能没问题,但我的一些游戏有数十甚至数百个以这种基本方式交互的对象。
现在我向经验丰富的程序员提出问题。
OOP 中有没有办法执行以下操作...
对于从 clsSpaceEntity 继承的每个事物
检查继承此类型的所有其他对象(除了自身),如果它们发生碰撞,则减少健康
下一个
?
这种类型的对象/类或任何“了解”另一个对象以及它们如何相同/不同和交互的能力将为我节省大量的编码。
对此的任何帮助/帮助或反馈将不胜感激。感谢您的宝贵时间,抱歉阅读时间长。
【问题讨论】:
-
不要使用匈牙利表示法 (
clsWhatever)。 -
看起来您正在尝试实现适当的关注点分离。使用更多的 OOP 概念,您可以制作精美分离的逻辑,而无需处理每种类型的对象的庞大方法。祝你好运!
-
稍微偏离主题,但您似乎对类和对象有点困惑。虽然它们是相关的,但它们并不是一回事。这个评论框有点小,无法提供完整的解释,但阅读其中的差异会让您的生活更轻松。