Я пытаюсь переместить окно изображения на экране хоста (простого сервера) через данные, поступающие с клиентского компьютера.Это простая игра-понг, которая является многопользовательской.Клиент отправляет данные всякий раз, когда нажимаются клавиши.Он в основном отправляет координаты оси Y изображения PictureBox, но я получаю сообщение об ошибке при попытке изменить местоположение окна изображения.Мой клиентский код, который отправляет местоположение оси Y в playerB pictureBox на серверный проигрыватель ..
private void keyisdown(object sender, 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);
}
}
Моя серверная программа, которая получает данные
public partial class 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)
{
}
}
Я получаю Y-образное изображение клиентского проигрывателя, и оно получает его, но каким-то образом оно не перемещается правильно, оно просто исчезает, когда получает Y-расположение, размер серверной программы n клиента и места одинаковые, поэтому она должна двигаться как зеркало
Это игра, которую я пытаюсь сделать левой - игрок1, а правая - игрок2
Мне также нужна помощь, чтобы узнать, как обновить положение мяча для обоих игроков и как я могу правильнореализовать мультиплеер, сейчас я пытаюсь медленно изменить простой клиентский код чата и получить нужные мне данные.но как я могу получать постоянные обновления игроков каждые 20 или 50 мс, я очень запутался.Заранее спасибо.