2010-08-18 4 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); 

그러나 한 가지 문제는 여전히 존재한다. 공유 객체는 실제로 선으로 그려지는 선을 충분히 빠르게 업데이트하지 않습니다. 공유 객체가 간격으로 업데이트됨에 따라 일부 데이터가 건너 뛰기 때문에 점선으로 표시됩니다. drawing_so.fps = 0을 사용하여 프레임 속도를 설정했지만 여전히 브라우저에서 충분히 빠르지 않습니다. 서버에 대한 플래시 테스트 클라이언트에서만 충분히 빠릅니다. 나는 더 나은 방법을 찾아 내려고 노력하고있다.

+0

점의 좌표를 가로 채고 선으로 연결할 수 있습니까? – alxx

+0

나는 그것을 어떻게하는지 잘 모릅니다. – clientbucket

+0

그 방법을 알고 있습니까? 가능한가? 나는 잘 모르겠다. 그게 제안이나 질문 이었습니까? – clientbucket

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

+1

이것은 해결책이 아닙니다. True 또는 False는 지속성 여부와 관련이 있습니다. 즉, 애플리케이션을 닫을 때 다른 애플리케이션이 애플리케이션에 연결되어 있는지 여부에 따라 여전히 돌아와서 보드에서 그림을 찾을 수 있는지 여부입니다. – clientbucket

+0

나는 그것을 알고있다. 그러나 그것이 도움이된다고 들었다. 어쨌든 당신은 예외적 인 결과물이나 추적을 가지고 있는가? 코드를 디버깅 했습니까? SO 오브젝트 내부에는 무엇이 보였습니까? – Eugene

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

} 

} 
관련 문제