Я застрял в ситуации, когда мне нужно перемещать шары в многопользовательском режиме, я использую RMI
в распределенной анимации движущихся шариков.
Моя цель состоит в том, чтобы перемещать несколько шариков таким образом, чтобы несколько клиентов наблюдали одно и то же движение / положение шариков, используя объект-шарик, который является удаленным объектом.
Моя проблема: Я вызываю функцию перемещения, которая является удаленной, и увеличение числа клиентов не приводит к вызову этой функции более часто, и это приводит к увеличению скорости мяча из-за увеличения вызовы этого метода от разных клиентов.
Может кто-нибудь, пожалуйста, порекомендуйте мне, как я могу справиться с этой проблемой, чтобы, когда мяч уже перемещался на одном клиенте, тогда другой шар не вызывал функцию, а просто использовал это.
вот код:
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