弃天笑(soda.C)的专栏

专注于Flash RIA和Flash网络游戏开发

弃天笑ID:sujun10
19538次访问,排名5903好友7人,关注者26
从事过java应用开发,flash网络游戏开发,现在从事flash教育系统开发
sujun10的文章
原创 34 篇
翻译 4 篇
转载 7 篇
评论 55 篇
弃天笑的公告
我的新blog开张了,以后第一 时间更新的是那个blog了,之后才在这里更新,有兴趣的人可以到那里去看,主要是说Flash RIA和flash游戏的 www.sujun.org
最近评论
sujun10:没试过,应该要做类似按钮之类的,或者插入html标签
丁仙霖:非常感谢,虽然有些地方,没看懂
123456:小弟,如何在flash中加入email 的链接??
paul7525:还不错啊,有收获~~谢谢啦
paul7525:还不错啊,有收获~~谢谢啦
文章分类
收藏
    相册
    我的相片
    Flash
    asfox Blog
    弃天笑的小窝
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 FMS做成的客户端动画同步(网游基础)收藏

    新一篇: FMS客户端 ActionScript NetConnection类 | 旧一篇: flash media server的简单后台调试步骤

    FMS做成的客户端动画同步(网游基础)

    前一段时间用java跟flash写了个最基本的客户端同步程序,现在再发用fms写了,大体上思路是不变的,但是因为服务器的程序不一样,所以多少有点变动。程序在这里就不作详细讲解,我在程序里写了详细的说明,大家可以下载去看。这里只讲下重要的部分
    至于程序用到的map。hashmap类,大家可以看我写那些类,这里也不说了。本来我把所有的程序都封装成了,但是考虑到简单易用,所以把打部分代码写进了时间线上。过一阵再把这些代码封进类吧,看起来会高级一点,呵呵
    stop();
    import mx.soda.util.Map;
    import mx.soda.util.HashMap;
    //用户名
    var userName:String;
    //玩家
    var personMC:MovieClip;
    //所有玩家mc的深度
    var depth:Number = 100;
    var mync:NetConnection = new NetConnection();
    //其他用户的集合
    var userSet:Map = new HashMap();
    //连接到服务器,并传送当前用户名
    mync.connect("rtmp://localhost/game",userName);
    //建立当前登陆玩家
    personMC = this.attachMovie("personMC","personMC" + userName,depth++);
    //设置用户名
    personMC.setName(userName);
    //连接状态
    mync.onStatus = function(info)
    {
    if (info.code == "NetConnection.Connect.Success")
    {
      trace("接通");
    }
    };
    //键盘动作,控制人物移动,并把当前动作发送到服务器
    this.onEnterFrame = function ()
    {
    if( Key.isDown( Key.UP ) )
    {
      personMC.up();
      mync.call("userAction",null,userName,"up");
    }
    else if( Key.isDown( Key.DOWN ) )
    {
      personMC.down();
      mync.call("userAction",null,userName,"down");
    }
    else if( Key.isDown( Key.LEFT ) )
    {
      personMC.left();
      mync.call("userAction",null,userName,"left");
    }
    else if( Key.isDown ( Key.RIGHT ) )
    {
      personMC.right();
      mync.call("userAction",null,userName,"right");
    }
    }
    //当有新用户登陆时,被服务器呼叫
    mync.userLogin = function(name:String)
    {
    //根据名字复制一个新的mc,最近登陆的用户
    var mc:MovieClip = _root.attachMovie("personMC","personMC" + name,depth++);
    userSet.put(name,mc);
    mc.setName(name);
    //马上呼叫客户端,把自己的位置告诉新登陆的客户端
    mync.call("userInfo",null,userName,name,personMC._x,personMC._y);
    };
    //当其他用户有动作时,被服务器呼叫
    mync.userAction = function(name:String,action:String)
    {
    var mc:MovieClip = userSet.get(name);
    //执行对应的方法
    mc[action]();
    };
    //更新已经登陆的用户
    mync.createUser = function(userName,x,y)
    {
    //根据名字复制一个新的mc
    var mc:MovieClip = _root.attachMovie("personMC","personMC" + userName,depth++);
    userSet.put(userName,mc);
    mc.setName(userName);
    mc._x = x;
    mc._y = y;
    }
    这些代码很容易懂吧,接下来是服务端的代码
    var userSet = new Object();
    //当用户登陆时,响应该事件
    application.onConnect = function(client,userName)
    {
    application.acceptConnection(client);
    //把当前登陆的用户名进行广播
    for(var str in userSet)
    {
      userSet[str].call("userLogin",null,userName);
    }
    //添加当前用户名
    userSet[userName] = client;
    }
    //对客户端传过来的信息进行转发
    Client.prototype.userAction = function(userName,action)
    {
    for(var str in userSet)
    {
      //避免把信息发给当前用户
      if(userName != str)
      {
       userSet[str].call("userAction",null,userName,action);
      }
    }
    }
    //呼叫最新用户更新其他用户资料
    Client.prototype.userInfo = function(selfName,userName,x,y)
    {
    userSet[userName].call("createUser",null,selfName,x,y);
    }
    最后补上控制mc的代码,是与一个mc捆绑在一起的
    /*
    * $Id:Person.as $
    *
    * @author  弃天笑 sujun10@21cn.com
    * @version  1.0
    * <br>Copyright 2005-2007 The SDK-I Studio
    * <br>This program is protected by copyright laws.
    * <br>Program Name:
    * <br>Date:2007.3.20
    */
    class soda.Person extends MovieClip
    {
    private var speed:Number = 5;

    private var nameText:TextField;

    public function Person()
    {
      //初始位置
      this._x = 100;
      this._y = 100;
    }
    public function setName(name:String)
    {
      nameText.text = name;
    }
    //控制主角的动作
    public function right():Void
    {
      this._x += speed;
    }
    public function left():Void
    {
      this._x -= speed;
    }

    public function up():Void
    {
      this._y -= speed;
    }
    public function down():Void
    {
      this._y += speed;
    }
    }
    恩,如果有什么
    问题,大家再讨论吧,下面是flash8环境,我调试过的。如果.swf不行的话,把.swf打包成.exe就可以连接了

    [ 本帖最后由 弃天笑 于 2007-3-22 15:56 编辑 ]


    附件: [源代码] 代码.rar (2007-3-22 15:56, 171.44 K) 

    发表于 @ 2007年03月22日 16:00:00|评论(loading...)|编辑

    新一篇: FMS客户端 ActionScript NetConnection类 | 旧一篇: flash media server的简单后台调试步骤

    评论

    #sujun10 发表于2007-03-23 11:36:12  IP: 61.144.60.*
    哈哈,再发一个用类封了的客户端代码,比较符合面向对象的编程写法
    /*
    * $Id:GameMain.as $
    *
    * @author 弃天笑 sujun10@21cn.com
    * @version 1.0
    * <br>Copyright 2005-2007 The SDK-I Studio
    * <br>This program is protected by copyright laws.
    * <br>Program Name:
    * <br>Date:2007.3.20
    */

    import mx.soda.util.Map;
    import mx.soda.util.HashMap;

    class soda.GameMain
    {
    //用户名
    private var userName:String;
    private var connect:NetConnection;
    //其他用户的集合
    private var userSet:Map;
    //根影片
    private var rootMC:MovieClip;
    //玩家
    private var personMC:MovieClip;
    //玩家mc的深度
    private var depth:Number;

    public function GameMain(userName:String,rootMC:MovieClip)
    {
    this.userName = userName;
    this.rootMC = rootMC;
    depth = 100;
    userSet = new HashMap();
    connect = new NetConnection();
    //连接到服务器
    connect.connect("rtmp://localhost/game",userName);
    //建立当前登陆玩家
    personMC = rootMC.attachMovie("personMC","personMC" + userName,depth++);
    personMC.setName(userName);
    //调用方法
    instacne();
    serverCall();
    #sujun10 发表于2007-03-23 11:36:52  IP: 61.144.60.*
    personAction();
    }

    public function instacne()
    {
    //是否连接服务器成功
    connect.onStatus = function(info)
    {
    if(info.code == "NetConnection.Connect.Success")
    {
    trace("连接成功!");
    }
    else
    {
    trace("连接失败!");
    }
    };
    }

    #sujun10 发表于2007-03-23 11:37:07  IP: 61.144.60.*
    //服务端呼叫的方法
    public function serverCall()
    {
    var par = this;
    connect.userLogin = function(name:String)
    {
    //根据名字复制一个新的mc,最近登陆的用户
    var mc:MovieClip = _root.attachMovie("personMC","personMC" + name,par.depth++);
    par.userSet.put(name,mc);
    mc.setName(name);
    //马上呼叫客户端,把自己的位置告诉新登陆的客户端
    this.call("userInfo",null,par.userName,name,par.personMC._x,par.personMC._y);
    };
    connect.userAction = function(name:String,action:String)
    {
    var mc:MovieClip = par.userSet.get(name);
    mc[action]();
    };
    //更新已经登陆的用户
    connect.createUser = function(userName,x,y)
    {
    //根据名字复制一个新的mc
    var mc:MovieClip = _root.attachMovie("personMC","personMC" + userName,par.depth++);
    par.userSet.put(userName,mc);
    mc.setName(userName);
    mc._x = x;
    mc._y = y;
    }
    }
    #支持! 发表于2007-05-17 11:18:18  IP: 221.221.130.*
    下载了源码去钻研
    网络游戏还是刚刚开始接触,希望能常交流:)
    #sujun10 发表于2007-05-17 14:00:40  IP: 61.144.60.*
    恩,有什么问题我们可以一起讨论
    #笨笨 发表于2008-06-29 23:03:12  IP: 60.217.214.*
    sujun 你好 今天看到你的博客非常高兴,像捡到宝一样:) 这个网游基础的源码我下载了,在本机上测试一切OK!! 后来我有个想法 ,想与我朋友的机器连机测试下,但未成功 。特请教一下。
    1,我的电脑是自动获取IP,我在“运行”中输入“CMD”和“ipconfig” 查出我的IP地址,把文件中的“losthost”改为了我的IP地址,但连接未通过。是不是这个IP地址需要是固定IP还是有别的什么知识我不了解?
    2. 我的FMS是3.0 , 是不是FMS也需要特别的设置一下?
    其实具体的就是如果想让别的机器与我连接,是不是我的机器环境需要更改一下?若说的不明白,可以留言,我每天晚上都会看你的博客 ~~
    #笨笨 发表于2008-06-29 23:09:28  IP: 60.217.214.*
    对了 我用的.swf文件
    #sujun10 发表于2008-06-29 23:54:45  IP: 61.144.96.*
    这个是flash新加的安全策略的问题
    如果你放flash放到网站上去,需要设置一个安全策略文件的
    详细可以看我
    http://blog.csdn.net/sujun10/archive/2007/12/19/1954407.aspx
    这篇文章
    你如果把flash打包成exe也是可以连接上去的
    #笨笨 发表于2008-06-30 08:55:18  IP: 221.0.24.*
    现在在上班,晚上回家搞一下,试试打包成.exe文件。还没想着放到网站上去,呵呵 只是和朋友的机器连一下 多谢多谢~~ 你起的蛮早的啊 ~~
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 弃天笑