[英]Shared Whiteboard with AS3. Code
我正在構建共享白板,但無法共享共享白板。 我已經成功創建了一個共享方法,並且在管理控制台中看到了該共享對象,該共享對象已經存在並且已連接,但是在其他瀏覽器上看不到該圖形。 我要發布整個動作腳本代碼。 如果可以,請你幫助我。 將不勝感激。 我真的是ActionScript的新手。
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);
}
}
}
}
這有效:
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);
}
}
}
}
嘗試更改此:
drawing_so = SharedObject.getRemote("draw",nc.uri,false);
至
drawing_so = SharedObject.getRemote("draw",nc.uri,true);
謝謝。 尤金
我現在通過添加以下更正使其成為共享白板:
rpenMC = new MovieClip();
var rpenTipSize:uint = 4;
var rpenColor:Number = 0x000000;
rpenMC.graphics.lineStyle(rpenTipSize, rpenColor, 1.0);
但是仍然存在一個問題。 共享對象的更新速度不足以使繪制的線真正成為線。 而是用虛線表示,因為隨着間隔的更新共享對象時會跳過一些數據。 我使用drawing_so.fps = 0
來設置幀速率,但是從瀏覽器上來看它仍然不夠快。 它僅在服務器上的Flash測試客戶端上足夠快。 我正在努力尋找一種更好的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.