2010-08-18 15 views
0

Je construis un tableau blanc partagé et je ne peux pas partager le tableau blanc partagé. J'ai réussi à créer une méthode partagée et je vois l'objet partagé dans la console d'administration qu'il est là et connecté mais ne peut pas voir le dessin sur un navigateur différent. Je poste tout le code ActionScript. S'il vous plaît aidez-moi si vous le pouvez. Sera grandement apprécié. Je suis vraiment nouveau à ActionScript.Tableau blanc partagé avec AS3. Code

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

} 

} 

Répondre

0

Je l'ai maintenant fait un tableau blanc partagé en ajoutant la correction suivante:

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

Mais il y a encore un problème. L'objet shared ne se met pas à jour assez rapidement pour que les lignes tracées soient réellement des lignes. Il s'agit plutôt de lignes en pointillés car certaines données sont ignorées lorsque l'objet partagé est mis à jour par intervalles. J'ai utilisé drawing_so.fps = 0 pour définir la fréquence d'images, mais ce n'est pas encore assez rapide sur le navigateur. Il est seulement assez rapide sur le client de test flash pour le serveur. Je suis en train d'essayer de trouver un meilleur moyen.

+0

Pouvez-vous intercepter les coordonnées des points et les relier avec des lignes? – alxx

+0

Je ne suis pas sûr de savoir comment faire cela. – clientbucket

+0

Savez-vous comment faire cela? C'est possible? Je ne suis pas sûr. Était-ce une suggestion ou une question? – clientbucket

0

essayer de changer ceci:

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

à

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

Merci. Eugene

+0

est ici plus de détails http://livedocs.adobe.com/fms/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file= 00000607.html – Eugene

+1

Ce n'est pas la solution. Vrai ou faux ne concerne que s'il est persistant ou non persistant. C'est à savoir si lorsque vous fermez l'application, vous pouvez toujours revenir et trouver des dessins sur le tableau en fonction si d'autres sont restés connectés à l'application. – clientbucket

+0

Je sais cela, mais j'ai entendu dire que cela pourrait aider, de toute façon avez-vous une sortie d'exception ou trace? avez-vous débogué votre code? Qu'avez-vous vu dans l'objet SO? – Eugene

1

Cela fonctionne:

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

} 

}