我陷入困境,我需要以多用户方式移动球,我使用RMI 在移动BALLS的分布式动画中。
我的目标是以某种方式移动多个球,以便多个客户观察球的相同运动/位置,我使用的球对象是远程对象。
我的问题是: 我正在调用移动功能,这是远程的,并且越来越多的客户端导致更频繁地调用该功能并且由于增加no而导致球速度越来越快从不同的客户调用此方法。
有人可以推荐我,我怎么能解决这个问题,当球已经在一个客户端移动时,其他球不会调用该功能但只是利用它。
这是代码:
public void start() {
Play = true;
Thread t = new Thread(this);
t.start();
}
public void run() {
while (Play == true) {
runball();
pit.repaint();
try {
Thread.sleep(50);
} catch (InterruptedException ie) {
stop();
}
}
}
public void runball() {
try {
aBall.setBounds(pit.getWidth(), pit.getHeight());
aBall.move();
}
catch (Exception e) {
e.printStackTrace();
}
}
并且有我的远程移动方法:
public void move() throws RemoteException {
// ... Move the ball at the give velocity.
m_x += m_velocityX;
m_y += m_velocityY;
if (m_x < 0) { // If at or beyond left side
m_x = 0; // Place against edge and
m_velocityX = -m_velocityX;
} else if (m_x > m_rightBound) { // If at or beyond right side
m_x = m_rightBound; // Place against right edge.
m_velocityX = -m_velocityX;
}
if (m_y < 0) { // if we're at top
m_y = 1;
m_velocityY = -m_velocityY;
} else if (m_y > m_bottomBound) { // if we're at bottom
m_y = m_bottomBound;
m_velocityY = -m_velocityY;
}
}
有人可以指导我,这个设计有一些问题我用错误的方式使用RMI吗?或者推荐一些我可以实现目标的设计。
非常感谢,
jibby
答案 0 :(得分:0)
我认为你的客户不应该告诉服务器移动球。
相反,应该有一个服务器线程以所需的速率移动球。客户应该只是询问服务器当前球的位置。