发表在 flash as2爱好者 10-06 19:35:16
前言: 编程少年 这篇文章 在百度搜不到的 好好珍惜吧!想制作小游戏的可以加入我们XE大家族!
注意:本文新手勿看 你也看不懂 本文可能部分存在广告内容 管理也别删 删了多可惜啊?百度都没有
//正式开始
全屏按钮.addEventListener(MouseEvent.CLICK,全屏按钮函数);//鼠标点击清空按钮就调用函数 清空按钮函数
function 全屏按钮函数(event:MouseEvent):void //定义清空按钮函数
{
stage.displayState = StageDisplayState.FULL_SCREEN;//电脑系统AS3全屏操作
}
function 键盘函数(event:KeyboardEvent):void //定义 键盘函数
{
if(event.keyCode==13){ //检测按下的键ID是不是13 (回车键)
if(发送文本.text!=""){//检测发送文本是不是 不为空
递增变量++; //递增变量加1
发送消息函数(发送文本.text,名字变量,递增变量,"xx"); /*调用函数 发送消息函数(发送的信息,名字,这个别管,指令)*/
}
}
}
音控按钮.addEventListener(MouseEvent.CLICK,音控函数);//鼠标点击音控按钮就调用函数 音控函数
音控按钮.addEventListener(TouchEvent.TOUCH_TAP,音控函数);//移动设备上点击音控按钮就调用函数 音控函数
function 音控函数(event:MouseEvent):void //定义音控函数
{
音.play(); //这里的硬盘剪辑是用来设置声音的 也就是变量 Stage.prototype.音开
}
gotoAndStop(Stage.prototype.帧状态)//防电脑版作弊
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;//允许移动设备上的触屏操作
stop()//这个不用说了吧?
清空按钮.addEventListener(MouseEvent.CLICK,清空按钮函数);//鼠标点击清空按钮就调用函数 清空按钮函数
清空按钮.addEventListener(TouchEvent.TOUCH_TAP,清空按钮函数);//移动设备上点击清空按钮就调用函数 清空按钮函数
function 清空按钮函数(event:MouseEvent):void //定义清空按钮函数
{ if(Stage.prototype.音开==1){ //检测用户是否开了声音
pq.gotoAndStop(3);//我们这等于播放爆炸声
}
显示文本.text=""; //清空主文本
}
返回按钮.addEventListener(MouseEvent.CLICK,回城按钮函数);//这3个不用说了,自己看上面
返回按钮.addEventListener(TouchEvent.TOUCH_TAP,回城按钮函数);
function 回城按钮函数(event:MouseEvent):void
{
stage.removeEventListener(KeyboardEvent.KEY_DOWN, 键盘函数); //删除键盘侦听函数 就是按键盘没用了
连接对象.removeEventListener(NetStatusEvent.NET_STATUS, 连接事件函数);//删除连接对象的侦听
组播对象.removeEventListener(NetStatusEvent.NET_STATUS, 连接事件函数);//看上面
连接对象.close()//连接对象断开连接
组播对象.close()//组播对象断开连接
gotoAndStop(1)//跳到第一帧登陆页
}
var 递增变量=0 //变量赋值
var 连接对象:NetConnection; //声明连接对象 类型为NetConnection
var 组播对象:NetGroup; //看上面
var 名字变量:String;
var connected:Boolean = false;//这个我就不知道了
连接函数(); //调用连接函数 让对象连接到服务器上
function 连接函数():void //定义 连接函数
{
//创建网络连接
连接对象 = new NetConnection();
//添加连接事件侦听
连接对象.addEventListener(NetStatusEvent.NET_STATUS,连接事件函数);
//连接地址“rtmfp:”(这是局域网的 需要服务器加我Q2199182141)
连接对象.connect(Stage.prototype.fmsh);//连接对象连接到服务器
名字变量 = 玩家名字.data.玩家名字 //给名字变量赋值
}
function 连接事件函数(event:NetStatusEvent):void //定义连接事件函数
{
消息显示函数(event.info.code,event.info.code,event.info.code,event.info.code);/*连接上后将服务器给的息传给消息显示函数*/
switch(event.info.code) //判断服务器给的消息
{
case "NetConnection.Connect.Success":
名字文本.text=名字变量;
//连接成功,创建需要广播的群组
发送按钮.addEventListener(MouseEvent.CLICK,发送按钮函数) //一旦按下发送按钮,就出发发送按钮函数
发送按钮.addEventListener(TouchEvent.TOUCH_TAP,发送按钮函数)//移动设备上的...
stage.addEventListener(KeyboardEvent.KEY_DOWN,键盘函数);//主屏侦听键盘,一旦有人按键盘,触发键盘函数
初始化组播函数(); //初始化组播对象
break;
case "NetGroup.Connect.Success":
connected = true;
break;
case "NetGroup.Posting.Notify":
//当获取到群组post群发通知的时候调用相关函数
//就是别人发信息,就触发此代码
传递消息函数(event.info.message);
break;
case "NetGroup.Neighbor.Connect":
case "NetGroup.Neighbor.Disconnect":
if(Stage.prototype.音开==1){
pq.gotoAndStop(4);
}
break;
case "NetConnection.Connect.Failed":
Stage.prototype.帧状态=1
gotoAndStop(1);//跳会第一帧
mm.text="连接失败!"
break;
}
}
function 初始化组播函数():void //定义函数 初始化组播函数
{
/*
GroupSpecifier类可以构造一个传递到NetStream和NetGroup的构造函数的加密groupspec字符串。
一个groupspec指定一个RTMFP P2P群组,包括功能、限制和成员授权等信息。
构造函数中的"myGroup/groupOne"为群组标识,可以随意字符串代替
*/
var 组播连接对象:GroupSpecifier = new GroupSpecifier(Stage.prototype.dkh);/*类变量Stage.prototype.dkh是组名称也就是你和你的
//设置群组中post群发方式是否可用
组播连接对象.postingEnabled = true;
//指定是否能通过ip多播方式交换更新关于组成员的信息。
组播连接对象.ipMulticastMemberUpdatesEnabled = true;
组播连接对象.serverChannelEnabled = true;/*这个是最重要的 我就因此没测试成功 这个是允许组播连接对象使用服务器通道*/
/*
将相关的群组加入某个IP地址并侦听相关的端口
Multicast的IP地址需要从不低于224开始,端口需高于1024 ————“224.0.0.0:1024”
为保证唯一性,一般设置高一些比较可靠:)
*/
组播连接对象.addIPMulticastAddress("225.225.0.1:30607");//端口不重要
//在已成功的连接nc上创建一个群组
//groupspecWithAuthorizations:返回一个包含授权的加密的groupspec字符串, 传给NetGroup的构造函数。
组播对象 = new NetGroup(连接对象,组播连接对象.groupspecWithAuthorizations());//说实话 我也没理解
//为群组增加事件侦听
组播对象.addEventListener(NetStatusEvent.NET_STATUS,连接事件函数);//看前面
}
function 发送消息函数(aac:String,bbc:String,ccc:String,ddc:String):void//定义发送消息函数
{
//注意,post方法传递的是一个对象Object,由此大家可以方便的在此对象中添加各种需要传递的属性:)
var message:Object = new Object();
//转换一个peerID的群组地址,以适合使用sendToNearest()方法。
message.sender = 组播对象.convertPeerIDToGroupAddress(连接对象.nearID);
message.aac = aac;//这个我们定义为消息 或内容
message.bbc = bbc;//这个我们定义用户
message.ccc = ccc;//这个是递增变量 为了防止消息重复也接受消息
message.ddc = ddc;//这个是命令 假如我发xx 你检测收到的是xx的话就显示aac 也就是消息
组播对象.post(message);//正式将消息发送出去!
传递消息函数(message);//由于是我们发的信息 我们可以提前接收消息
}
function 传递消息函数(message:Object):void
{
消息显示函数(message.aac,message.bbc,message.ccc,message.ddc);//调用消息显示函数将message:Object传给他
}
function 消息显示函数(aac:String,bbc:String,ccc:String,ddc:String):void{//定义消息显示函数
trace(aac+"-"+bbc+"-"+ccc+"-"+ddc)//测试时用
var aacc="成功连接!-----------------------"
var bbcc="系统"
if(aac!="NetConnection.Connect.Success"){
if(aac!="NetGroup.Connect.Success"){
aacc=aac
}
}
if(bbc!="NetConnection.Connect.Success"){
if(bbc!="NetGroup.Connect.Success"){
bbcc=bbc
}
}
if(bbc=="NetGroup.Neighbor.Connect"){
aacc="一名用户上线!-----------------------"
bbcc="系统"
}
if(bbc=="NetGroup.Neighbor.Disconnect"){
if(Stage.prototype.音开==1){
pq.gotoAndStop(4);
}
aacc="一名用户下线!-----------------------"
bbcc="系统"
}
if(bbc!="NetGroup.Posting.Notify"){
if(ddc=="xx"){
trace("ok")
if(Stage.prototype.音开==1){
pq.gotoAndStop(2);
}
显示文本.appendText("("+bbcc+"说:"+aacc+")"+"\n");//显示系统说的话
} else {
显示文本.appendText("("+bbcc+"说:"+aacc+")"+"\n");//显示其他用户说的话
}
}
if(aacc==发送文本.text){
发送文本.text=""
}
}
function 发送按钮函数(event:MouseEvent):void
{
if(发送文本.text!=""){
递增变量++;//变量递增 避免消息重复而别人接受不到
发送消息函数(发送文本.text,名字变量,递增变量,"xx");
}
}
//--------------------------------------------
这里不多做解释 ,不懂的加我QQ2199182141 我给解答
自定义参数以后 我们就可以开动脑筋 做小型网游了!