2010-08-18 78 views
0

我正在構建共享白板,並且無法共享共享白板。我已經成功創建了一個共享方法,並且在管理控制檯中看到共享對象,它已經存在並已連接,但無法在其他瀏覽器上看到圖形。我張貼整個動作代碼。如果可以,請你幫助我。將不勝感激。我對動作非常陌生。帶AS3的共享白板。代碼

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); 
    } 
    } 

} 

} 

回答

0

現在我已經加入下面的修正使之成爲共享白板:

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

但仍有一個問題。 sharedobject不會更新得足夠快,因爲繪製的線條確實是線條。它們是虛線,因爲有些數據會因間隔更新而被忽略。我使用drawing_so.fps = 0來設置幀速率,但它在瀏覽器上仍然不夠快。它在閃存測試客戶端到服務器上的速度足夠快。我正在試圖找出更好的方法。

+0

你可以截取點的座標並用線連接它們嗎? – alxx 2010-08-19 06:26:13

+0

我不知道該怎麼做。 – clientbucket 2010-08-19 14:06:59

+0

你知道該怎麼做嗎?可能嗎?我不確定。這是一個建議或問題嗎? – clientbucket 2010-08-19 14:43:39

0

嘗試改變這一點:

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

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

謝謝。 尤金

+0

這裏有更多的細節 http://livedocs.adobe.com/fms/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file= 00000607.html – Eugene 2010-08-18 23:23:47

+1

這不是解決方案。正確還是錯誤只與它是持久還是不持久有關。這就是當你關閉應用程序時,你是否仍然可以回來並在電路板上查找圖形,具體取決於其他人是否連接到應用程序。 – clientbucket 2010-08-19 00:14:35

+0

我知道,但我聽說它可以幫助,無論如何你有一些異常輸出或跟蹤? 你有沒有調試你的代碼? 你在SO對象裏面看到了什麼? – Eugene 2010-08-19 00:33:22

1

這工作:

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); 
    } 
    } 

} 

}