- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
长期读者第一次海报。请温柔点。
我热衷于在 VB.net 中创建游戏。作为一名业余程序员,我免费赠送我的游戏。因为我是一个没有经过正式培训的业余爱好者,所以我尝试让自己了解正确的编程原则,并在进行 OOP 等编程时遵循这些原则。然而,有些事情我显然错过了自学的机会,如果我接受过正规教育,也许我会知道这些。
一旦这样的问题真正成为我的祸根,不同的类(从现在开始称为对象)如何在没有编程特定交互的情况下彼此“了解”(请在这里陪我......请......)
好吧想象一下,你有一个太空游戏和以下对象
现在,这些对象中的每一个都有一个 Health、X、Y 和 Z 私有(private)成员和属性,出于参数考虑,这些成员和属性均从 clsSpaceEntity 继承。现在,在它们之间进行编程冲突的一种方法是在主游戏循环中编写以下逻辑
对于船舶列表中的每艘船舶
检查列表中的每个 clsMissile 以查看是否与其发生碰撞,如果是,则减少生命值
检查列表中的每个 clsAsteroidin 是否与其发生碰撞,如果是,则降低生命值
检查每个 clsSpaceJunka 列表以查看是否与其发生碰撞,如果是,则降低生命值
...对于每个对象依此类推下一页
等等等等...
现在,如果您谈论的是上面的简单示例,那么这可能没什么问题,但我的一些游戏有数十甚至数百个以这种基本方式交互的对象。
现在我向经验丰富的程序员提出问题。
OOP 中有没有办法执行以下操作...
对于从 clsSpaceEntity 继承的每个事物
检查继承此类型的所有其他对象(除了其自身),如果它们发生碰撞,则会降低生命值
下一页
?
这种类型的对象/类或其他任何类型“了解”另一个对象/类以及它们如何相同/不同以及交互的能力将节省我大量的编码。
对此的任何帮助/帮助或反馈将不胜感激。感谢您抽出宝贵的时间,抱歉读得太长了。
最佳答案
而不是有一个单独的 List(Of T)
对于每个派生对象,您应该创建一个 List(Of SpaceEntity)
它包含您的所有实体。
然后您可以创建一个嵌套 For Each
循环遍历每对实体并进行碰撞检查。 (经过If x <> y
检查)
您可以通过提供SpaceEntity
来进一步增强您的设计一个MustOverride
函数来处理与其他对象的碰撞,而不会因为每个实体的单独逻辑而污染碰撞循环。
您可能应该使用 visitor pattern允许实体对与不同其他类型实体的碰撞做出不同的 react 。
请注意,每次碰撞都会发送到分别碰撞的两个对象;你需要用你的逻辑来处理这个问题。
关于vb.net - “ self 意识”类(class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7961353/
背景 我想要一个跟踪其自身状态的函数: var myObject = { myFunction: function () { var myself = this.myFunct
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 2年前关闭。 Improve t
Windows 10 Creator's Update Edition 中为最终用户提供了一个新选项。最终用户可以在兼容性选项卡上将 EXE 的属性更改为“覆盖高 DPI 缩放行为”并将其设置为系统(
这个问题在这里已经有了答案: Windows Forms window changes its size when I create a WPF window (3 个答案) 关闭 4 年前。 所以
长期读者第一次海报。请温柔点。 我热衷于在 VB.net 中创建游戏。作为一名业余程序员,我免费赠送我的游戏。因为我是一个没有经过正式培训的业余爱好者,所以我尝试让自己了解正确的编程原则,并在进行 O
我正在将 Spring 插入现有的 Java EE Web 应用程序。我的 web.xml 中有以下几行: com.MyContextListener 然后跟随 MyContextList
我曾想将我的应用程序的新版本(WPF 通过 Desktop Bridge 转换为 UWP)发布到 Microsoft Store,但未能通过认证,并出现以下警告: File **.exe neithe
在我的“工具箱”中,我正在使用此功能: function dataAttuale() { $now = new DateTime(); $data
我有一个同时使用 winforms 和 WPF 的 C# 程序,我正在努力让它在高 DPI 环境中工作。目前,如果我从解决方案中删除所有 WPF 项目并运行它,它会很好地缩放,但是一旦我重新添加任何
我是一名优秀的程序员,十分优秀!