- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在设计一个 2D 游戏来练习 Java 和面向对象编程(我正在使用 JSFML 库,如果这有帮助的话),我对如何最好地设计以下内容有疑问:
我正在使用的库提供了一个由可见游戏元素(玩家、敌人、背景等)实现的Drawable
界面。我还有一个 RenderWindow
,我将在其上绘制 Drawable
对象。
事情是这样的,RenderWindow
有一个 draw(Drawable d)
方法,它在当前窗口上绘制一个 Drawable
对象,并且Drawable
对象有一个 draw(RenderWindow r)
方法,它在传递的 RenderWindow
上绘制当前的 Drawable
对象。
如果它们基本上做同样的事情,我应该使用哪一个?为什么?我应该考虑什么来决定?我使用 HashMap 来存储 Drawable
对象。是将RenderWindow
传递给HashMap中的Drawables
,还是将HashMap中的Drawables
传递给RenderWindow
?任何建议表示赞赏。
最佳答案
您问题的一个简单答案是
Java 语言不支持双重分派(dispatch)机制。
要做什么:库希望您覆盖这些方法但永远不要调用它们。我没有使用过该库,但根据游戏引擎的一些经验,我猜应用程序将调用 RenderWindow 的绘制,并且最终将调用所有 Drawable 的绘制方法。 (Drawables 的集合将由 RenderWindow 维护。
原因:Java 通过检查调用方法的对象类(而不是检查引用)来动态调用方法。这称为(您可能知道)动态分派(dispatch)。
但是方法的参数是通过仅检查引用来选择的(而不是通过作为参数传递的实际对象的类。)
在这里,通过强制动态分派(dispatch)两次(通过为同一目的制作两种方法),库开发人员间接实现了双重分派(dispatch)。
将来,您可能希望同时扩展 Drawable 和 RenderWindow。如果你只在 Drawable 中有 draw 方法,你就不能为 RenderWindow 的每个 child 单独绘制。双重调度解决了这个问题。
希望这会有所帮助。
关于java - OOP 设计 : How to decide program flow and class responsible for method (JSFML library),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20687360/
Akka 新手。创建一个扩展 SupervisorStrategy 的新 Scala 类为我提供了以下模板: class MySupervisorStrategy extends Supervisor
Selenium Webdriver如何确定按钮是启用还是禁用?我用过isEnabled() 两个按钮的方法-一个启用,另一个禁用,但在两种情况下均返回true。除了使用isEnabled()之外,还
我试图让闭包编译器内联一些以简单模式封装在配置对象中的代码,而无需任何类型注释。 React does this并设法降低 bundle 大小 我观察到以下情况: a.js (function mai
我一直在尝试针对 Android 进行改造。响应为空。如果我的理解是正确的,这可能是因为 400 响应或我的模型类中的响应建模不正确。我得到的响应如下: {"itemA":"data", "itemB
我正在尝试使用 Accord 库实现的 k 最近邻。首先,我使用了 double[][] inputs = new double[15000][]; int[] out
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
当我们使用 sadd 在集合中插入一个成员时,是否有一种确定的方式来插入数据?例如, 127.0.0.1:6380> smembers test 1) "hello world" 2) "hello"
我已经看过一些YOLO教程,但是我发现很难确定要分割图像的每个单元格的“ anchor ”框是否是预先确定的。在我经历的其中一个指南中,该图像被分为 13x13 单元格,并指出每个单元格预测 5 an
有没有办法在 Coq 中对相互递归类型使用决定相等策略? 例如,如果我有这样的东西: Inductive LTree : Set := | LNil | LNode (x: LTree) (y
我有几个类,例如 MyClassA MyClassB MyClassC 和 MyClassD 我想要一个给定 Class 类型的函数,该函数将创建(并执行任何操作......)一个作为该类实例的对象。
如何从以下 mysql 查询的 where 子句中引用 'decider'? SELECT *, CASE WHEN (cond1) THEN 1 W
我正在使用 C++ 中的 QuickFix 为代理 FIX 平台实现启动器端。他们的 FIX 规范提供了他们支持的消息列表;登录、心跳和其他消息。 MessageCracker(修复 4.2)为同一类
我正在尝试使用 Accord.NET 库进行对象分类,但我未能找到任何合适的示例,并且文档不足以理解该过程。我当前的代码是 Predictor = new Boost(); AdaBoost Algo
今天我在 msdn 中看到博客,我注意到如何计算算法的时间复杂度。我完全理解如何计算算法的时间复杂度,但最后作者提到了以下几行 Adding everything up I get (N+4)+(5N
随着我们的办公室升级到 Window 7,我的任务是更新登录脚本以与 Windows 7 一起使用。所述脚本的创建者早已不复存在,我不是批处理文件专家。 我要做的是确定操作系统。当我执行一些网络管理职
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
当我尝试在 Mac 上的 Andriod Studio 上运行该项目时,出现如下内部错误: Andriod Emulator closed because of an internal error:
我正在阅读一篇关于 Haskell 以及 HList 是如何实现的研究论文,并想知道所描述的技术何时可以确定,何时不能确定类型检查器。此外,因为您可以使用 GADT 做类似的事情,所以我想知道 GAD
我最近在一个用GCC 8编译的软件中研究了段错误。代码如下所示(这只是一个草图) struct Point { int64_t x, y; }; struct Edge { // some o
大多数句子分割器都能够在正确的位置分割文本流。 我正在寻找一个模型来决定某些文本是否是句子。 最佳答案 简单的解决方案:使用解析器(例如,Stanford Parser,它是免费的并且是Java的,但
我是一名优秀的程序员,十分优秀!