MC新手入门(四十五)------游戏网络功能二
绘画功能
绘画功能是实现用鼠标在画布上面画图。
1.设置画笔
给角色act_drawActor.添加事件里添加<创建角色>事件,在创建角色添加脚本来设置默认画笔,如下图8-2-2-1 所示:
图8-2-2-1
图8-2-2-2
2.设置鼠标
实现鼠标左键按下开始绘画,鼠标左键弹起时停止绘画。在添加鼠标事件之前先在全局脚本里添加idraw变量,来标识鼠标是按下还是弹起,0表示弹起,1表示按下。给角色act_drawActor.添加事件里添加<鼠标键按下>事件,在鼠标键按下添加脚本,如下图8-2-2-3所示:
图8-2-2-3
图8-2-2-4
给角色act_drawActor.添加事件里添加<鼠标键弹起>事件,在鼠标键弹起添加脚本,如下图8-2-2-5所示:
图8-2-2-5
图8-2-2-6
3.给角色act_drawActor添加事件里添加<绘制角色>事件,用来绘画图形。在绘制角色事件添加脚本,如下图8-2-2-7所示:
图8-2-2-7
图8-2-2-8
到这里绘画功能算完成了,运行一下。是否能用鼠标绘画呢?
数据传输功能
数据传输是实现了<你画我猜>游戏图形的传输,比如:用户1在游戏界面画图通过服务器可以马上传输到用户2游戏界面,这样就可以让用户2来猜用户1在画什么东西。
1. 修改act_drawActor.添加事件里添加<鼠标键按下>事件,在鼠标键按下添加脚本添加发送数据脚本,如下图8-2-3-1所示:
图8-2-3-1
代码如下:
SendNetDataf("%s &%d&%d", "act_drawActor", xmouse, ymouse);
2.修改角色act_drawActor.添加事件里添加<绘制角色>事件,在绘制角色事件添加发送数据脚本,如下图8-2-3-2所示:
图8-2-3-2
代码如下:
SendNetDataf("%s %d&%d", "act_drawActor", xmouse, ymouse);
3. 给角色drawActor.添加事件里添加<接收网络信息>事件,在网络信息事件添加发送数据脚本,如下:
nt i = 0;
int iflag = 0;
char chMsg[256] , chAcX[256] , chAcY[256];
int iX , iY;
GetNetData(chMsg);
for(i = 0 ; i < 256 ; i++)
{
if(38 == chMsg[0]) //第一个字符为“&”表示鼠标刚刚按下开始作画,应该移动画笔
{
iflag = 1;
}
if(38 == chMsg && i != 0)
{
if(1 == iflag)
{
strncpy(chAcX, chMsg + 1, i - 1);
strcpy(chAcY, chMsg + i + 1);
}
else
{
strncpy(chAcX , chMsg , i);
strcpy(chAcY, chMsg + i + 1);
}
}
}
iX = atoi(chAcX);
iY = atoi(chAcY);
screen_to_actor(&iX, &iY); //获得鼠标坐标
if(1 == iflag)
{
moveto(iX, iY);
}
lineto(iX, iY); //画一条线至鼠标坐标
4.游戏网络设置
既然要网络传输,那肯定要设置网络传输协议、服务器IP等设置。如下图8_16所示:
图 8-2-3-3
注意:
在运行测试之前要注意:测试之前须将服务器打开。
服务器:MC安装目录下NetServer文件夹中Server.exe。
服务器端口配置要与游戏设置中的服务器端口一样。
到这里总算大功告成了,测试运行一下。是否在一个游戏界面画图,另一个游戏界面马上就出现所画的图呢?
练习与思考:
通过上面的例子,我想大家对网络通信有一定了解了,现在做一个类似QQ聊天软件工具,实现两个用户聊天。
Demo下载地址:http://www.dongyo.cn/bbs/forum.php?mod=viewthread&tid=2527&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline