学习fms的一个多人涂鸦板demo

      flash学习 2006-3-16 16:44
主要的类代码: <BR />
class com.ycccc.MPDoodle { <BR />
  private static var mync:NetConnection; <BR />
  private static var my_rso:Object; <BR />
  private static var mync_url:String; <BR />
  public static var doodle_board:MovieClip; <BR />
  private static var press_statue:Boolean; <BR />
  public static var max_num:Number; <BR />
  private static var doodle_lineColor:Number = random(0xffffff); <BR />
  public static function init() { <BR />
    netConnect(); <BR />
  } <BR />
  private static function netConnect() { <BR />
    mync = new NetConnection(); <BR />
    mync.onStatus = function(info) { <BR />
      if (info.code == "NetConnection.Connect.Success") { <BR />
        trace("连接成功"); <BR />
        initRSO(this); <BR />
        drawControl(); <BR />
      } <BR />
    }; <BR />
    if (!mync_url) { <BR />
      mync_url = "rtmp://192.168.2.46/ycccc"; <BR />
      //mync_url = "rtmp://192.168.2.46/ycccc1"; <BR />
    } <BR />
    mync.connect(mync_url); <BR />
  } <BR />
  private static function initRSO(NC) { <BR />
    //远程共享对象 <BR />
    my_rso = SharedObject.getRemote("myRSO", NC.uri, true); <BR />
    my_rso.onSync = function(list) { <BR />
      if (!my_rso.data.doodle_time) { <BR />
        my_rso.data.doodle_time = 0; <BR />
      } <BR />
      for (var i in list) { <BR />
        var info = list[i]; <BR />
        switch (info.code) { <BR />
        case "change" : <BR />
          trace("change"); <BR />
          drawAllLine(info); <BR />
          break; <BR />
        case "success" : <BR />
          trace("success"); <BR />
          drawAllLine(info); <BR />
          break; <BR />
        case "reject" : <BR />
          trace("reject"); <BR />
          _root.ccc.text = "reject"; <BR />
          //当事件类型是"修改不成功"时: <BR />
          //break; <BR />
        } <BR />
      } <BR />
    }; <BR />
    my_rso.connect(NC); <BR />
    my_rso.setFps(120); <BR />
  } <BR />
  private static function drawAllLine(info) { <BR />
    var __time:Number = my_rso.data[info.name].id; <BR />
    if (__time<>undefined) { <BR />
      _root.createEmptyMovieClip("temp_board"+__time, __time); <BR />
      _root["temp_board"+__time].lineStyle(5, my_rso.data[info.name].color); <BR />
      _root["temp_board"+__time].moveTo(my_rso.data[info.name].arr[0].x, my_rso.data[info.name].arr[0].y); <BR />
      for (var l = 0; l<my_rso.data[info.name].arr.length; l++) { <BR />
        _root["temp_board"+__time].lineTo(my_rso.data[info.name].arr[l].x, my_rso.data[info.name].arr[l].y); <BR />
      } <BR />
    } <BR />
  } <BR />
  private static function drawControl() { <BR />
    var point_arr:Array = []; <BR />
    var temp_board:MovieClip; <BR />
    var id:Number; <BR />
    doodle_board.onPress = function() { <BR />
      my_rso.data.doodle_time++; <BR />
      id = my_rso.data.doodle_time; <BR />
      temp_board = _root.createEmptyMovieClip("temp_board", 99999); <BR />
      press_statue = true; <BR />
      my_rso.data["doodle_use"+id] = {}; <BR />
      my_rso.data["doodle_use"+id].id = id; <BR />
      my_rso.data["doodle_use"+id].arr = []; <BR />
      my_rso.data["doodle_use"+id].arr.push({x:_xmouse, y:_ymouse}); <BR />
      point_arr.push({x:_xmouse, y:_ymouse}); <BR />
      temp_board.lineStyle(5, doodle_lineColor); <BR />
      my_rso.data["doodle_use"+id].color = doodle_lineColor; <BR />
      temp_board.moveTo(_xmouse, _ymouse); <BR />
    }; <BR />
    doodle_board.onMouseMove = function() { <BR />
      updateAfterEvent(); <BR />
      if (press_statue and doodle_board.hitTest(_xmouse, _ymouse, true)) { <BR />
        my_rso.data["doodle_use"+id].arr.push({x:_xmouse, y:_ymouse}); <BR />
        temp_board.lineTo(_xmouse, _ymouse); <BR />
        point_arr.push({x:_xmouse, y:_ymouse}); <BR />
      } <BR />
    }; <BR />
    doodle_board.onMouseUp = function() { <BR />
      press_statue = false; <BR />
      temp_board.clear(); <BR />
      if (point_arr.length<=1) { <BR />
        my_rso.data["doodle_use"+id].arr = []; <BR />
        temp_board.removeMovieClip(); <BR />
      } <BR />
      if (id>max_num) { <BR />
        _root["temp_board"+(id-max_num)].removeMovieClip(); <BR />
        my_rso.data["doodle_use"+(id-max_num)].arr = []; <BR />
      } <BR />
    }; <BR />
  } <BR />
} <BR />
//



fla:

import com.ycccc.*;
MPDoodle.max_num = 20;
MPDoodle.doodle_board = mc;
MPDoodle.init();
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}