【问题标题】:Shared Whiteboard with AS3. Code与 AS3 共享白板。代码
【发布时间】:2011-03-31 20:30:03
【问题描述】:

我正在构建共享白板,但无法共享共享白板。我已经成功创建了一个共享方法,并且我在管理控制台中看到了共享对象,它存在并已连接,但在其他浏览器上看不到绘图。我正在发布整个动作脚本代码。如果可以,请你帮助我。将不胜感激。我对动作脚本真的很陌生。

package
{
 import flash.display.Sprite;
 import flash.display.MovieClip;
 import flash.net.SharedObject;
 import flash.events.NetStatusEvent;
 import flash.events.SyncEvent;
 import flash.net.NetConnection;
 import flash.events.MouseEvent;

 public class PenSOmc extends Sprite
 {
  private var drawing_so:SharedObject;
  private var nc:NetConnection;
  private var good:Boolean;
  private var isDrawing:Boolean;
  private var penMC:MovieClip;
  private var rpenMC:MovieClip;
    // Mouse Coordinates
    private var startX:int;
    private var startY:int;
    private var endX:int;
    private var endY:int;

  // Remote mouse coordinates
    private var rstartX:int;
    private var rstartY:int;
    private var rendX:int;
    private var rendY:int;


  public function PenSOmc ()
  {
   penMC = new MovieClip();
   var rtmpNow:String="rtmp://localhost/whiteboard";
   nc=new NetConnection;
   nc.connect(rtmpNow);
   nc.addEventListener(NetStatusEvent.NET_STATUS,doSO);
   stage.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
   stage.addEventListener(MouseEvent.MOUSE_MOVE, drawing);
   stage.addEventListener(MouseEvent.MOUSE_UP, stopDrawing);
   addChild(penMC);
  }


  private function doSO (e:NetStatusEvent):void
  {
   good=e.info.code == "NetConnection.Connect.Success";
   if (good) 
   {
    //Shared object
    drawing_so = SharedObject.getRemote("draw",nc.uri,false);
    drawing_so.connect(nc);
    drawing_so.addEventListener(SyncEvent.SYNC,doUpdate);
    trace("Connected");
   }
  }

  private function doUpdate (se:SyncEvent):void
  {

   for (var cl:int = 0; cl < se.changeList.length; cl++)
   {    


    trace(se.changeList[cl].code);

    switch(se.changeList[cl].code)
    {
     case "clear":
      break;
     case "success":
      break;
     case "change":
      //var points:String = sharedObject.data.points;


      var pointsArray:Array = drawing_so.data.points.split(/,/);
      var rstartX:int = int(pointsArray[0]);
      var rstartY:int = int(pointsArray[1]);
      var rendX:int = int(pointsArray[2]);
      var rendY:int = int(pointsArray[3]);   
      rpenMC = new MovieClip();
      rpenMC.graphics.moveTo(rstartX,rstartY);
      rpenMC.graphics.lineTo(rendX,rendY);
      addChild(rpenMC);
      break;
    }
   }
  }

  private function startDrawing (e:MouseEvent):void
  {
   trace("Start drawing");
   isDrawing = true;
   var penTipSize:uint = 1;
   var penColor:Number = 0x000000;
   penMC.graphics.lineStyle(penTipSize, penColor, 1.0);
   startX = mouseX;
   startY = mouseY;
   penMC.graphics.moveTo(startX, startY);
  }

  private function stopDrawing (e:MouseEvent):void
  {
   trace("Stop drawing");
   isDrawing = false;
  }

  private function drawing (e:MouseEvent):void
  {
   if (isDrawing)
   {
    trace("Drawing");
    endX = mouseX;
    endY = mouseY;
    drawing_so.setProperty("points",startX + "," + startY + "," + endX + "," + endY);
    penMC.graphics.lineTo(endX, endY);
   }
  }

 }

}

【问题讨论】:

    标签: actionscript-3 graphics shared-objects whiteboard


    【解决方案1】:

    尝试改变这一点:

    drawing_so = SharedObject.getRemote("draw",nc.uri,false);
    

    drawing_so = SharedObject.getRemote("draw",nc.uri,true);
    

    谢谢。 尤金

    【讨论】:

    • 这不是解决方案。真假只与是否持久有关。也就是说,当您关闭应用程序时,您是否仍然可以返回并在板上找到图纸,具体取决于其他人是否仍与应用程序保持连接。
    • 我知道,但我听说它会有所帮助,无论如何你有一些异常输出或跟踪吗?你调试过你的代码吗?你在 SO 对象里面看到了什么?
    • 请看我的更新。它现在是一个有一个问题的共享白板。
    【解决方案2】:

    我现在通过添加以下更正使其成为共享白板:

      rpenMC = new MovieClip();
      var rpenTipSize:uint = 4;
      var rpenColor:Number = 0x000000;
      rpenMC.graphics.lineStyle(rpenTipSize, rpenColor, 1.0);
    

    但是还有一个问题。共享对象的更新速度不足以使绘制的线条真正成为线条。它们是虚线,因为随着共享对象的间隔更新,一些数据被跳过。我使用drawing_so.fps = 0 设置帧速率,但在浏览器上仍然不够快。它仅在闪存测试客户端上对服务器足够快。我正在尝试找出更好的方法。

    【讨论】:

    • 你能截取点的坐标并用线连接它们吗?
    • 你知道怎么做吗?可能吗?我不知道。这是建议还是问题?
    【解决方案3】:

    这行得通:

    package
    {
     import flash.display.Sprite;
     import flash.display.MovieClip;
     import flash.net.SharedObject;
     import flash.events.NetStatusEvent;
     import flash.events.SyncEvent;
     import flash.net.NetConnection;
     import flash.events.MouseEvent;
    
     public class PenSOmc extends Sprite
     {
      private var drawing_so:SharedObject;
      private var nc:NetConnection;
      private var good:Boolean;
      private var isDrawing:Boolean;
      private var penMC:MovieClip;
      private var rpenMC:MovieClip;
        // Mouse Coordinates
        private var startX:int;
        private var startY:int;
        private var endX:int;
        private var endY:int;
    
      // Remote mouse coordinates
        private var rstartX:int;
        private var rstartY:int;
        private var rendX:int;
        private var rendY:int;
    
    
      public function PenSOmc ()
      {
       penMC = new MovieClip();
       var rtmpNow:String="rtmp://localhost/whiteboard";
       nc=new NetConnection;
       nc.connect(rtmpNow);
       nc.addEventListener(NetStatusEvent.NET_STATUS,doSO);
       stage.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
       stage.addEventListener(MouseEvent.MOUSE_MOVE, drawing);
       stage.addEventListener(MouseEvent.MOUSE_UP, stopDrawing);
       addChild(penMC);
      }
    
    
      private function doSO (e:NetStatusEvent):void
      {
       good=e.info.code == "NetConnection.Connect.Success";
       if (good) 
       {
        //Shared object
        drawing_so = SharedObject.getRemote("draw",nc.uri,false);
        drawing_so.connect(nc);
        drawing_so.addEventListener(SyncEvent.SYNC,doUpdate);
        trace("Connected");
       }
      }
    
      private function doUpdate (se:SyncEvent):void
      {
    
       for (var cl:int = 0; cl < se.changeList.length; cl++)
       {    
    
        switch(se.changeList[cl].code)
        {
         case "clear":
          break;
         case "success":
          break;
         case "change":
          //var points:String = sharedObject.data.points;
          var pointsArray:Array = drawing_so.data.points.split(/,/);
          var rstartX:int = int(pointsArray[0]);
          var rstartY:int = int(pointsArray[1]);
          var rendX:int = int(pointsArray[2]);
          var rendY:int = int(pointsArray[3]);   
          //penMC.graphics.moveTo(rstartX,rstartY);
          penMC.graphics.lineTo(rendX,rendY);
          break;
        }
       }
      }
    
      private function startDrawing (e:MouseEvent):void
      {
       trace("Start drawing");
       isDrawing = true;
       var penTipSize:uint = 1;
       var penColor:Number = 0x000000;
       penMC.graphics.lineStyle(penTipSize, penColor, 1.0);
       startX = mouseX;
       startY = mouseY;
       penMC.graphics.moveTo(startX, startY);
      }
    
      private function stopDrawing (e:MouseEvent):void
      {
       trace("Stop drawing");
       isDrawing = false;
      }
    
      private function drawing (e:MouseEvent):void
      {
       if (isDrawing)
       {
        trace("Drawing");
        endX = mouseX;
        endY = mouseY;
        drawing_so.setProperty("points",startX + "," + startY + "," + endX + "," + endY);
        penMC.graphics.lineTo(endX, endY);
       }
      }
    
     }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-21
      • 1970-01-01
      • 2017-07-11
      • 2015-10-06
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多