java中与父对象通信的对象

java中与父对象通信的对象,java,arrays,object,communication,parent,Java,Arrays,Object,Communication,Parent,现在,我一直在寻找这个问题的答案,但谷歌和我所有的力量似乎让我失望 我上了这门课。(我的世界)。 在MyWorld中,我有一个对象数组 GameUnit m_MyUnits[] = new GameUnit[maxUnits]; 现在m_MyUnits在这里充满了游戏单元和子类,它们在屏幕上像奶酪蛋糕一样快乐地走来走去。 我甚至为它们中的每一个编写了自己的小碰撞检测,这样它们就不会互相碰撞 一切都很好,但是! 为了使碰撞检测能够工作,我选择了最慢的方法(我想也是最需要内存的方法) 在MyWor

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

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

GameUnit m_MyUnits[] = new GameUnit[maxUnits];
现在m_MyUnits在这里充满了游戏单元和子类,它们在屏幕上像奶酪蛋糕一样快乐地走来走去。 我甚至为它们中的每一个编写了自己的小碰撞检测,这样它们就不会互相碰撞

一切都很好,但是! 为了使碰撞检测能够工作,我选择了最慢的方法(我想也是最需要内存的方法)

在MyWorld中,我首先通过每个游戏单元进行循环,并获得阵列的X和Y位置 私有整数[][]位置=新整数[2][maxUnits])

然后我在每个游戏单元中循环,并将这个数组分配给它。(游戏单元有自己的数组,称为位置)

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

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

For(int i=0;i
这可能吗


您的JavaApprentis。

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

游戏单元中

private MyWorld myWorld;

public GameUnit(int,int,double, MyWorld m) {
    myWorld = m;
}
new GameUnit(1, 2, 1.0, this);
然后在
MyWorld
中,当您制作
GameUnit
时:

private MyWorld myWorld;

public GameUnit(int,int,double, MyWorld m) {
    myWorld = m;
}
new GameUnit(1, 2, 1.0, this);
然后在
GameUnit
的所有方法中,您都可以使用
MyWorld
中的
MyWorld
对象。

类似于 将MyWorld类型的世界属性添加到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.
}

您是否有对
MyWorld
的变量实例的引用,或者您希望获得的所有内容都是
静态的
?这种依赖程度也可能表明你的设计有缺陷。是的,它有缺陷……或者我想是这样?如果你问天气与否,我已经将MyWorld的任何信息传递给GameUnit的实例,那么不,我没有!我想这就是我想做的。但我不确定。如果我想这样做,那我该怎么做?GameUnit的构造函数是(int,int,double)要添加什么?传递什么?然后你可以按照@ErnestFriedmanHill的建议做,并在构造函数中添加一个
MyWorld
参数。还有一些提示——Java世界中几乎没有人使用匈牙利符号(“m_XXXX”)。在Java程序中避免这种情况已成为习惯做法。另外,它是惯用的(也是很好的设计),不提供直接的现场访问,就像你对m_MyUnits所做的那样,而是将其私有化并提供一个公共getter。谢谢,但是。正如我以前回答吐温的那样:我想这样做,但我该怎么做呢?GameUnit的构造函数是(int,int,double)要添加什么?那要通过什么呢?那该怎么称呼呢?谢谢你,伙计,这帮我省了不少钱(我在运行程序时用掉了80%的内存。thx)