lag in a multiplayer java game

234
January 13, 2018, at 10:31 AM

Basically every time I start the game in multiplayer, the server starts to lag and slowly send the information to the client. Right now I'm using a tcp unicast connection.

Server part where I send, I call all the methods, the tick method is called every second:

public void tick()
{
    riceviPosizioneGiocatore2();
    comunicaPosizioni();
}

Server part where this method sends info to the client, basically the for loop and checks through a sequence for the identity of the object and sends it to the client:

public void comunicaPosizioni()
{
    try
    {
        Float x, y;
        int vita;
        for(int i = 0; i < gestore.oggetto.size(); i++) //scorre tutti gli oggetti del lista 
        {   
            OggettiDiGioco oggettoTemp = gestore.oggetto.get(i);
            if(oggettoTemp.getID() == ID.Giocatore)
            {
                x = oggettoTemp.getX();
                y = oggettoTemp.getY();
                vita = oggettoTemp.getVita();
                out.writeUTF(oggettoTemp.getID() + "");
                out.writeFloat(x);
                out.writeFloat(y);
                out.writeInt(vita);
            }
            else if(oggettoTemp.getID() == ID.Giocatore2)
            {
                vita = oggettoTemp.getVita();
                out.writeUTF(oggettoTemp.getID() + "");
                out.writeInt(vita);
            }
            else if(oggettoTemp.getID() == ID.Nemico)
            {
                x = oggettoTemp.getX();
                y = oggettoTemp.getY();
                vita = oggettoTemp.getVita();
                out.writeUTF(oggettoTemp.getID() + "");
                out.writeFloat(x);
                out.writeFloat(y);
                out.writeInt(vita);
            }
            else if(oggettoTemp.getID() == ID.NemicoIntelligente)
            {
                x = oggettoTemp.getX();
                y = oggettoTemp.getY();
                vita = oggettoTemp.getVita();
                out.writeUTF(oggettoTemp.getID() + "");
                out.writeFloat(x);
                out.writeFloat(y);
                out.writeInt(vita);
            }
            else if(oggettoTemp.getID() == ID.NemicoVeloce)
            {
                x = oggettoTemp.getX();
                y = oggettoTemp.getY();
                vita = oggettoTemp.getVita();
                out.writeUTF(oggettoTemp.getID() + "");
                out.writeFloat(x);
                out.writeFloat(y);
                out.writeInt(vita);
            }
            else if(oggettoTemp.getID() == ID.GiocatoreProiettili)
            {
                x = oggettoTemp.getX();
                y = oggettoTemp.getY();
                vita = oggettoTemp.getVita();
                out.writeUTF(oggettoTemp.getID() + "");
                out.writeFloat(x);
                out.writeFloat(y);
                out.writeInt(vita);
            }
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

Then we receive player 2 position and set them on the player 1 (server) window to have the player 2 movement:

public void riceviPosizioneGiocatore2()
{
    try 
    {
        Float xG2, yG2;
        String idRicevuto;
        xG2 = in.readFloat();
        yG2 = in.readFloat();
        int vitaG2 = in.readInt();
        for (int i = 0; i < gestore.oggetto.size(); i++)
        {
            OggettiDiGioco oggettoTemp = gestore.oggetto.get(i);
            if(oggettoTemp.getID() == ID.Giocatore2)
            {
                oggettoTemp.setX(xG2);
                oggettoTemp.setY(yG2);
                oggettoTemp.setVita(vitaG2);
            }
        }
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }
}

The lag could be created by the for of comunicaPosizioni because it is too slow? What can I do to fix this problem? Thanks for the help

READ ALSO
Best way to integrated a database into an app?

Best way to integrated a database into an app?

I'm new to app development, so bear with me

151
Google play dienste leaderboard

Google play dienste leaderboard

I have some problems with the Google leaderboard for an Android appI followed the instructions on https://developers

227
IntelliJ IDEA code reformat not working

IntelliJ IDEA code reformat not working

I am using IntelliJ IDEA version 20173, then I install plug-in CheckStyle-IDEA v 5

315
Access the DTO elements

Access the DTO elements

I am stuck with an issue and not sure how to proceed with it

150