2010-08-18 4 views
0

Я создаю общую доску, и я не могу использовать общую доску. Я успешно создал общий метод, и я вижу, что общий объект в консоли администратора находится там и подключен, но не может видеть чертеж в другом браузере. Я размещаю весь код ActionScript. Пожалуйста, помогите мне, если сможете. Будем очень благодарны. Я действительно новичок в ActionScript.Общая доска с 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 для установки частоты кадров, но в браузере все еще недостаточно. Он достаточно быстро работает на клиенте Flash-тестирования на сервере. Я пытаюсь найти лучший способ.

+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

Это не решение. Истина или ложь относятся только к тому, является ли она постоянной или не постоянной. То есть, когда вы закрываете приложение, вы все равно можете вернуться и найти чертежи на доске в зависимости от того, остались ли другие приложения к приложению. – 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); 
    } 
    } 

} 

}