【问题标题】:Libgdx: Objects creating other objectsLibgdx:创建其他对象的对象
【发布时间】:2015-06-10 20:39:36
【问题描述】:

我有一个关于简单游戏架构的一般性问题。 在我的游戏中,我有这些课程:

  1. 负责绘制和渲染的主类。
  2. 具有一些属性和执行某些操作的 update() 函数的 Ball 对象。

主类有一个包含所有现有球实例的数组,render() 函数负责遍历所有这些实例并调用它们的 update()。 此外,主类具有创建另一个实例的 createBall() 函数。

假设其中一个实例想要在游戏中创建另一个球(通过他的 update())。 哪种方式是正确的方法:

  1. 每个球都在其构造函数中获取主类实例(主类在创建球时将其自身传递给球)并调用 main.createBall();
  2. 每个球都有一系列“请求”,主类读取并理解球想要创建的内容。

这应该是一个通用问题,因为它有点定义实例与主类通信的方式。

谢谢!

【问题讨论】:

    标签: java android architecture libgdx


    【解决方案1】:

    从 OOD 的角度来看,我会有一个知道创造球的第三类。我会在 Main 中实例化它,并将它传递给构造函数中的 Ball 类。你可以调用这个类 BallFactory。

    Ball 类在想要创建 Ball 时会调用 addRequest(),而 Main 类会在准备好进行实际创建时调用 processRequests()。该列表本身将保留工厂的私有实现细节,这很好encapsulation

    这给了我们更好的separation of concerns

    您建议的选项都可以使用,但从纯 OO 的角度来看,它们并不理想,因为它们减少了 Main(选项 1)或 Ball(选项 2)类的 cohesion

    【讨论】:

    • 好的,Ball 实例将调用 BallFactory.addRequest()(它添加到 BallFactory 拥有的请求数组中),Main 类将在 render() 中运行数组并创建根据请求实例?
    • 其实,为什么不让 Main 调用 BallFactory 上的方法来处理列表呢?这样 Main 不需要任何额外的代码。所以... Ball 会调用 addRequest(),而 Main 会调用 processRequests()
    • 所以基本上 processRequests() 会根据它的私有请求列表调用 main.createBall() ?
    • 嗯...这不是我的意思...我认为 createBall() 根本没有理由在 Main 类中。也就是说,我可能是错的,因为我没有看到你所有的代码。
    猜你喜欢
    • 2015-03-12
    • 2017-04-22
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    相关资源
    最近更新 更多