пытаясь переместить pictureBox из данных удаленного клиента, но pictureBox исчезает - как я могу переместить pictureBox из данных - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь переместить окно изображения на экране хоста (простого сервера) через данные, поступающие с клиентского компьютера.Это простая игра-понг, которая является многопользовательской.Клиент отправляет данные всякий раз, когда нажимаются клавиши.Он в основном отправляет координаты оси Y изображения PictureBox, но я получаю сообщение об ошибке при попытке изменить местоположение окна изображения.Мой клиентский код, который отправляет местоположение оси Y игрока player1 pictureBox на сервер игрока

private void keyisdown (отправитель объекта, KeyEventArgs e) {

        if (e.KeyCode == Keys.Up)
        {
            goup = true;


        String s = Convert.ToString(player.Location.Y);

        byte[] byteTime = Encoding.ASCII.GetBytes(s);

        ns.Write(byteTime, 0, byteTime.Length);
    }
        if (e.KeyCode == Keys.Down)
        {
            godown = true;

        String s = Convert.ToString(player.Location.Y);

        byte[] byteTime = Encoding.ASCII.GetBytes(s);

        ns.Write(byteTime, 0, byteTime.Length);
    }


}

Моя серверная программа, которая получает данные

открытый частичный класс Form1: Form {

delegate void SetTextCallback(string text);

TcpListener listener;

TcpClient client;

NetworkStream ns;

Thread t = null;


public Form1()
{
    InitializeComponent();

    listener = new TcpListener(IPAddress.Any, 4545);

    listener.Start();

    client = listener.AcceptTcpClient();

    ns = client.GetStream();

    t = new Thread(DoWork);

    t.Start();
}

private void button1_Click(object sender, EventArgs e)
{
    String s = textBox2.Text;

    byte[] byteTime = Encoding.ASCII.GetBytes(s);

    ns.Write(byteTime, 0, byteTime.Length);
}
public void DoWork()

{

    byte[] bytes = new byte[1024];

    while (true)

    {

        int bytesRead = ns.Read(bytes, 0, bytes.Length);
        string data;
       this.SetText(Encoding.ASCII.GetString(bytes, 0, bytesRead));

       // data = (Encoding.ASCII.GetString(bytes, 0, bytesRead));

       // int Y = Convert.ToInt32(data);

       // pictureBox1.Location = new Point(769, Y);
    }

}

private void SetText(string text)

{

    // InvokeRequired required compares the thread ID of the

    // calling thread to the thread ID of the creating thread.

    // If these threads are different, it returns true.

    if (this.pictureBox1.InvokeRequired)

    {

        SetTextCallback d = new SetTextCallback(SetText);

        this.Invoke(d, new object[] { text });


    }

    else

    {

        this.pictureBox1.Location = new Point(769, Convert.ToInt32( text));

    }

}

private void textBox1_TextChanged(object sender, EventArgs e)
{

}

private void Form1_Load(object sender, EventArgs e)
{

}

}

я получаю Y-образное расположение клиентского игрового поля, и оно получает его, но каким-то образом оно не перемещается правильнопросто исчезает, когда получает Y местоположение, размер серверной клиентской программы n такой же, и местоположения одинаковые, поэтому она должна двигаться как зеркало

Это игра, которую я пытаюсь сделать левой, это player1и правильно, player2

Мне также нужна помощь, чтобы узнать, как я могу обновить положение мяча для обоих игроков и как правильно реализовать многопользовательскую игру, сейчас я пытаюсь медленно изменить простой клиент чата.код и получить данные, которые мне нужны.но как я могу получать постоянные обновления игроков каждые 20 или 50 мс, я очень запутался.Заранее спасибо.

...