“房间类”网络游戏中一小部分的讨论

CanDy_O 2009-07-31 10:40:21
大家都玩过那种要先进入房间,然后一个房间里的人一起耍的网络游戏吧,想什么跑跑卡丁车、劲舞团、甚至斗地主、麻将也是类似的,那么客户端首先要把其他人创建的房间显示出来才行啊,其他人创建了房间别人看不见岂不是更加悲剧?
有人创建了房间以后把这个信息传到服务器端,然后服务器端把这个信息发送到其他客户端(这个应该是广播吧)来显示房间,那么在客户端看来,就是监听到服务器传来的这个信息,就在界面中显示房间,然后在有进入房间等操作。
以下是对这个过程中客户端的一个模拟,比如说客户端先在Form1界面,点击button1后就要进入Form2界面,这时就要在Form2里显示“所有的房间”,也就是在listbox1里添加item;

 
Public Class Class1
Delegate Sub AddListboxItem(ByVal mystring As String)
Public Sub AddListboxItemMethod(ByVal mystring As String)
Form2.ListBox1.Items.Add(mystring)
End Sub
Public Sub Method()
Dim mystring As String = "1"
Dim myDeletate As New AddListboxItem(AddressOf AddListboxItemMethod)
myDeletate.Invoke(mystring)
End Sub
End Class

这是一个类的代码,里面定义了一个委托AddListboxItem,和对应的过程AddListboxItemMethod

Imports System.Threading
Public Class Form1
Dim cl As New Class1
Dim th As New Thread(AddressOf cl.Method)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
th.Start()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Form2.Show()
End Sub
End Class

这是Form1得代码,Form1中有一个按钮,Form2中有一个listbox1

1.希望在点击按钮后,启动线程用委托的方式,实现在工作线程中(也就是自己创建的这个线程)
让UI线程在Form2的listbox1中添加项目,可是点击按钮后没反应;

2.如果把Class1中的这句myDeletate.Invoke(mystring)换成Form2.listbox1.Invoke(myDeletate,mystring)
会报错:“在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。”;

3.如果改成:
If Form2.ListBox1.InvokeRequired Then
Form2.ListBox1.Invoke(myDeletate, mystring)
Else
MsgBox("not InvokeRequiredrequied")
End If
就执行Else里面的语句;那么改成:
If Form2.ListBox1.InvokeRequired Then
Form2.ListBox1.Invoke(myDeletate, mystring)
Else
Form2.ListBox1.Items.Add(mystring)
End If
还是不能把 mystring 添加到Form2.listbox1里去;

...全文
96 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
CanDy_O 2009-08-01
  • 打赏
  • 举报
回复
想通了,就是当客户端处于选择房间界面时就定时向服务器端发出接收房间信息请求,然后服务器就把房间信息发过来,这样就减轻了服务器端的负担
CanDy_O 2009-08-01
  • 打赏
  • 举报
回复
请问Client如何自己定时更新啊?
BATTLERxANGE 2009-08-01
  • 打赏
  • 举报
回复
如果只是自己学习的话,我觉的定时广播会比“一进一出”的形式更费力,毕竟自己学习的话连接的人数不会有太多,不过如果是正式的话定时应该会比较好一点吧,不过说不定数据不能及时刷新
老Key 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualbasic2000 的回复:]
有人创建了房间以后把这个信息传到服务器端,然后服务器端把这个信息发送到其他客户端(这个应该是广播吧),
应该让Client自己定时更新吧
[/Quote]

这个想法就很正确啊,lz学习一下
CanDy_O 2009-07-31
  • 打赏
  • 举报
回复
不管怎么样,更新要有从服务器端发送过来的房间信息才能吧
我想的是让服务器端定时发送广播到所有客户端
当然如果有一个创建就发一下,人太多的话会吃不消

树莓派 2009-07-31
  • 打赏
  • 举报
回复
有人创建了房间以后把这个信息传到服务器端,然后服务器端把这个信息发送到其他客户端(这个应该是广播吧),
应该让Client自己定时更新吧

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧