0

现在,我一直在寻找这个问题的答案,但谷歌和我所有的力量似乎都让我失望了。

我得到了这门课。(我的世界)。在 MyWorld 我有一个对象数组

GameUnit m_MyUnits[] = new GameUnit[maxUnits];

现在 m_MyUnits 充满了 GameUnits 和子类,它们像芝士蛋糕一样快乐地在屏幕上走来走去。我什至为它们中的每一个编写了自己的小碰撞检测,因此它们不会相互碰撞。

一切正常,但是!为了让我的碰撞检测起作用,我选择了最慢的方法(我认为需要最多的内存)

在 MyWorld 中,我首先循环遍历每个 GameUnit 并获取数组的 X 和 Y 位置 private int[][] Positions = new int[2][maxUnits]);

然后我循环遍历每个 GameUnit 并将这个数组分配给它。(GameUnit 有自己的名为 Positions 的数组)

现在,虽然这有效,但我不禁认为这很愚蠢,就像……。好吧,我不会在这里使用这些词。

有没有办法让 GameUnit 调用 MyWorld 中的位置,或者更好的是,让游戏单元调用 MyWorld 中的数组 m_MyUnits[].getX() 和 m_MyUnits[].getY() 类似这样的事情(我使用 Parent从 GameUnit 引用 MyWorld)

For(int i = 0;i < Parent.maxUnits;i++) {
  int targetX = Parent. m_MyUnits[i].getX();
  int targetY = Parent. m_MyUnits[i].getX();
  //Do some thing like collition detection with the data.
}

这是可能的,还是?

你的JavaApprentis。

4

2 回答 2

0

当您创建 aGameUnit时,您可以将MyWorld作为构造函数参数传递。然后GameUnit构造函数可以将MyWorld对象存储在成员变量中。然后,当它需要进行碰撞检测时,它可以MyWorld通过调用该对象上的方法来请求潜在合作伙伴的列表。

GameUnit

private MyWorld myWorld;

public GameUnit(int,int,double, MyWorld m) {
    myWorld = m;
}

然后在MyWorld,当你做一个GameUnit

new GameUnit(1, 2, 1.0, this);

然后在 的所有方法中GameUnit,您都有可用的MyWorld对象。myWorld

于 2012-04-25T21:46:09.890 回答
0

将 MyWorld 类型的 World 属性添加到 GameUnit。更改 GameUnit 的构造函数以接受 World 作为参数并将 World 设置为它。

将 GetX 和 GetY 方法添加到 MyWorld,将 m_MyUnits[i].getX() 和 getY 与数组中的索引作为参数一起包装。

给予类似的东西

For(int i = 0;i < World.maxUnits;i++) {
  int targetX = World. getX(i);
  int targetY = World. getY(i);
  //Do some thing like collition detection with the data.
}

说我想我会颠倒这个并做类似的事情

If (World.Collide(this))
{
  // Die messily.
}
于 2012-04-25T22:16:41.943 回答