我目前正在开发一个客户端服务器应用程序,其中 2 个客户端在 JFrame 上有一个椭圆形,他们每个人都可以看到他们的位置。
我的问题是当 Client1 得到 Client2 的位置时,他没有得到正确的值,因为对手在 Frame 上的椭圆位置不对。我决定让两个椭圆都向下移动(增加 y 值)并打印 oppYPos。似乎当 y = 250 时,它又回到了 y = 4。
我能够获得两个客户端的起始位置并在两个窗口上绘制椭圆,但是当我运行线程时,一切都从那里走下坡路......
由于我不能发布图片,这里有一些代码:
这发生在客户端线程中:movePlayer,向下移动椭圆,检查碰撞,然后将当前 x 和 y 值发送到服务器,然后服务器将这些新值设置为第二个客户端的 Opponent 值并获取 opp 位置另一个客户
//This while loop is in the run method
while(true){
movePlayer();
checkForCollisions();
sendValuesToServer();
getOppValuesFromServer();
repaint();
try {
Thread.sleep(120);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void sendValuesToServer()
{
try {
outputToServer.write(myXPos);
outputToServer.write(myYPos);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void getOppValuesFromServer(){
try {
this.oppXPos = inputFromServer.read();
this.oppYPos = inputFromServer.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这是服务器端
//The xStartPos are overriden by the new x and y values from the client
while (true) {
synchronized (this) {
// Getting the new variables back
try {
xStartPos = inputFromClient.read();
yStartPos = inputFromClient.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// Setting the new values for opponents
synchronized (this) {
for (SnakeServerThread sst : snakeThreads) {
if (sst != this) {
currentOppXPos = sst.xStartPos;
currentOppYPos = sst.yStartPos;
}
}
}
synchronized (this) {
try {
outputToClient.write(currentOppXPos);
outputToClient.write(currentOppYPos);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这工作正常,直到 y 值为 250 ......出于某种原因,它将它设置为零,并且对手只是在屏幕的一半消失并从顶部开始。
抱歉,如果我包含的内容太多,但在过去的 2 个小时里我一直在尝试解决这个问题,但没有运气!!
谢谢