MC新手入门(四十五)------游戏网络功能二
来源:互联网 发布:centos中文输入法 编辑:程序博客网 时间:2024/05/19 17:56
绘画功能
绘画功能是实现用鼠标在画布上面画图。
1.设置画笔
给角色act_drawActor.添加事件里添加<创建角色>事件,在创建角色添加脚本来设置默认画笔,如下图8-2-2-1 所示:
实现鼠标左键按下开始绘画,鼠标左键弹起时停止绘画。在添加鼠标事件之前先在全局脚本里添加idraw变量,来标识鼠标是按下还是弹起,0表示弹起,1表示按下。给角色act_drawActor.添加事件里添加<鼠标键按下>事件,在鼠标键按下添加脚本,如下图8-2-2-3所示:
数据传输功能
数据传输是实现了<你画我猜>游戏图形的传输,比如:用户1在游戏界面画图通过服务器可以马上传输到用户2游戏界面,这样就可以让用户2来猜用户1在画什么东西。
1. 修改act_drawActor.添加事件里添加<鼠标键按下>事件,在鼠标键按下添加脚本添加发送数据脚本,如下图8-2-3-1所示:
SendNetDataf("%s &%d&%d", "act_drawActor", xmouse, ymouse);
2.修改角色act_drawActor.添加事件里添加<绘制角色>事件,在绘制角色事件添加发送数据脚本,如下图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所示:
绘画功能是实现用鼠标在画布上面画图。
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
- MC新手入门(四十五)------游戏网络功能二
- MC新手入门(四十四)------游戏网络功能一
- MC新手入门(二十二)------ 游戏场景
- MC新手入门(二十四)------ 游戏声效
- MC新手入门(二)------路径
- MC新手入门(十三)------ 添加游戏角色
- MC新手入门(十四)------ 游戏帧事件
- MC新手入门(二十)------ 计时器
- MC新手入门(二十一)------ 碰撞事件
- MC新手入门(五十一)------服务器连接 二
- MC新手入门(三十九)------ 声音函数、游戏控制器
- MC新手入门(二十三)------ 音频的设定
- MC新手入门(二十五)------美术图片要求
- MC新手入门(二十六)------屏幕适配
- MC新手入门(二十七)------数据类型、标识符、常量与变量
- MC新手入门(二十八)------ 顺序结构程序
- MC新手入门(二十九)------ 关系运算符和表达式
- MC新手入门(四十一)------ 愤怒小狗制作二
- 基于大规模语料的新词发现算法
- mysql的TIMESTAMP类型,是否在insert时自动标记时间日期?
- Windows Phone 7 – 写一个会Record Audio的录音程式
- ICE Manual(Documentation for Ice 3.5)---The Ice Protocol(Protocol Compression)
- mysql 远程连接
- MC新手入门(四十五)------游戏网络功能二
- oracle 单表 备份
- ICE Manual(Documentation for Ice 3.5)---The Ice Protocol(Protocol and Encoding Versions)
- Spring MVC学习(七)-------SpringMVC数据类型转换
- android绘制view的过程之一---------计算view大小(measure)
- Android Studio设置主题 和 不支持中文的问题解决方法
- 精通BIRT:Eclipse商务智能报表工具开发实践指南
- ubuntu1204开发环境搭建
- java-----------Jackson 框架,轻易转换JSON