java - 在 Java 中为级别内的形状类创建层次结构

标签 java oop

我正在开发一个基于 Java 的游戏,我需要对一些基本形状进行建模。我目前的实现在相同尺寸的形状上有很多重复的属性。

示例,我有一个参与 Box2d 世界的交互式 矩形,并且我有一个背景 Rectangle 不涉及 Box2d 世界。但这两个类都需要定义宽度高度

有人知道更好的方法来建模这些数据吗?

当前实现..

current implementation

模拟新实现的想法,但是InteractiveBackground只能从一个父级继承。

idea for new class diagram

我拥有 InteractiveBackground 类的原因是这样我可以循环访问我的对象,如下所示。

for (Background bgShape : getLevel.getBGShapes()){

    bgShape.draw(
        gl2,
        new Vec3(
            bgShape.getPosition().x,
            bgShape.getPosition().y,
            bgShape.getPosition().z));
}

for (Body body = world.getBodyList(); body != null; body = body.getNext()) {

    Interactive iaShape = (Interactive) body.getUserData();

    iaShape.draw(
        gl2,
        new Vec3(
            body.getPosition().x,
            body.getPosition().y,
            0.0f));
}

此外,Interactive 类还定义了许多 Background 中不存在的属性,

public abstract class InteractiveShape extends Shape {

    private String bodyType;
    private float density;
    private float friction;
    private float restitution;
    private boolean fixedRotation;
    private Body body;
}

最佳答案

  1. 第二个示例要好得多,因为矩形实际上是一个形状,但具有附加数据(宽度和高度)
  2. 我认为IteractiveBackground是不必要的,除非它们添加了任何额外的操作(从图片来看它们没有)。

关于java - 在 Java 中为级别内的形状类创建层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30350070/

相关文章:

java - 如何在 Struts 中重定向 NullPointerException?

java - onBackPressed() 没有被调用

php - 在这种简单的情况下,PHP 拒绝接受返回类型的原因是什么?

c++ - 在 C++ 中,如何从 B 类访问 Class 中的多维数组?

javascript - 内置类的子类的私有(private)字段在被覆盖的方法中是否不可访问?

java - Amazon S3 存储桶子对象 REST 和 Java(无需 SDK)

java - 将 ArrayList <String> 转换为 ArrayList<SelectItem>

语言规范中的Java静态初始化线程安全保证

oop - 如何向新程序员解释松散耦合和信息隐藏?

oop - 多重继承 : What's a good example?