1. MovieClip声音卸载
Code
this.addEventListener(Event.REMOVED_FROM_STAGE,removedFromStageHandler);
private function removedFromStageHandler(event:Event):void
{
this.soundTransform = new SoundTransform(0);
}
private function removedFromStageHandler(event:Event):void
{
this.soundTransform = new SoundTransform(0);
}
2. 自定义事件
EventDispatcher是DisplayObject 类的基类,其实就是一个可以执行dispatchEvent的Object,适用于没有图形界面,而又希望执行事件的类,继承关系就是这样:
Sprite-->DisplayObjectContainer-->InteractiveObject-->DisplayObject-->EventDispatcher-->Object
MyEvent
package
{
import flash.events.Event;
public class MyEvent extends Event
{
public static const XOVER300:String = "x over 300 pixel";
public static const YOVER250:String = "y over 250 pixel";
public var param:String = "";
public function MyEvent(type:String)
{
super(type);
}
}
}
{
import flash.events.Event;
public class MyEvent extends Event
{
public static const XOVER300:String = "x over 300 pixel";
public static const YOVER250:String = "y over 250 pixel";
public var param:String = "";
public function MyEvent(type:String)
{
super(type);
}
}
}
Rect
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
public class Rect extends Sprite
{
public function Rect()
{
init();
}
private function init():void
{
this.graphics.beginFill(0xFF0000);
this.graphics.drawRect(0,0,30,30);
this.graphics.endFill();
this.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
this.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);
}
private function mouseDownHandler(event:MouseEvent):void
{
this.startDrag();
}
private function mouseUpHandler(event:MouseEvent):void
{
this.stopDrag();
if(this.x>300)
{
var myEvent:MyEvent = new MyEvent(MyEvent.XOVER300);
myEvent.param = "当前X坐标:"+this.x;
this.dispatchEvent(myEvent);
}
if(this.y>250)
{
this.dispatchEvent(new MyEvent(MyEvent.YOVER250));
}
}
}
}
{
import flash.display.Sprite;
import flash.events.MouseEvent;
public class Rect extends Sprite
{
public function Rect()
{
init();
}
private function init():void
{
this.graphics.beginFill(0xFF0000);
this.graphics.drawRect(0,0,30,30);
this.graphics.endFill();
this.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
this.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);
}
private function mouseDownHandler(event:MouseEvent):void
{
this.startDrag();
}
private function mouseUpHandler(event:MouseEvent):void
{
this.stopDrag();
if(this.x>300)
{
var myEvent:MyEvent = new MyEvent(MyEvent.XOVER300);
myEvent.param = "当前X坐标:"+this.x;
this.dispatchEvent(myEvent);
}
if(this.y>250)
{
this.dispatchEvent(new MyEvent(MyEvent.YOVER250));
}
}
}
}
文档类
package
{
import flash.display.Sprite;
public class Sample0104 extends Sprite
{
private var rect:Rect;
public function Sample0104()
{
rect = new Rect();
rect.addEventListener(MyEvent.XOVER300,xover300Handler);
rect.addEventListener(MyEvent.YOVER250,yover250Handler);
this.addChild(rect);
}
private function xover300Handler(event:MyEvent):void
{
trace("x坐标超过了300!得到的参数是:"+event.param);
event.target.x = 50;
}
private function yover250Handler(event:MyEvent):void
{
trace("y坐标超过了250!");
event.target.y = 50;
}
}
}
{
import flash.display.Sprite;
public class Sample0104 extends Sprite
{
private var rect:Rect;
public function Sample0104()
{
rect = new Rect();
rect.addEventListener(MyEvent.XOVER300,xover300Handler);
rect.addEventListener(MyEvent.YOVER250,yover250Handler);
this.addChild(rect);
}
private function xover300Handler(event:MyEvent):void
{
trace("x坐标超过了300!得到的参数是:"+event.param);
event.target.x = 50;
}
private function yover250Handler(event:MyEvent):void
{
trace("y坐标超过了250!");
event.target.y = 50;
}
}
}
3. far命令打包asc
far -package -archive main -files 1.asc 2.asc 3.asc main.asc
4. 将swf以资源的形式嵌入
[Embed(source="bg.swf", mimetype="application/octet-stream")]
public var swfAsset:Class;
public var swfAsset:Class;
5. TextField添加图形/动画资源
Code
package
{
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.geom.Rectangle;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class TestTextField extends Sprite
{
private var textBox:TextField;
public function TestTextField()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
var bg:Sprite = new Sprite();
bg.graphics.beginFill(0xCCCCCC);
bg.graphics.drawRect(0,0,300,600);
bg.graphics.endFill();
this.addChild(bg);
textBox = new TextField();
textBox.autoSize = TextFieldAutoSize.LEFT;
textBox.multiline = true;
textBox.wordWrap = true;
textBox.width = 200;
textBox.text = "/:11/:13The 我 胡Ì 是 /:02 ab the /:03 with a /:04/:02/:01 as whye /:05 with a /:06 on egg /:07 with a /:02 /:02 /:55 中华人民共和国的成立,标志着100多年来半殖民地半封建的旧中国历史的 /:02 结束,揭开了中国历史的新篇章,使一个占世界人口近四分之一的大国成/:88为独立自主的国家,人民从此成为国家的主人/:77";
textBox.border = true;
bg.addChild(textBox);
replaceMarkToFace();
}
private function replaceMarkToFace():void
{
var reg:RegExp = /\/:[0-9]{2}/g;
var arrSplit:Array = textBox.text.split(reg);
var arrFace:Array = textBox.text.match(reg);
textBox.htmlText = textBox.htmlText.replace(reg,"<font size=\"24\">胡</font>");
var count:int = 0;
var arrIndex:Array = new Array();
for(var i:int=0;i<arrSplit.length;i++)
{
count++;
var len:int = arrSplit[i].toString().length;
count += len;
arrIndex.push(count);
}
for(var j:int=0;j<arrIndex.length;j++)
{
var curIndex:int = arrIndex[j]-1;
if(textBox.text.charCodeAt(curIndex)!=13)
{
trace(textBox.height);
var startRect:Rectangle = textBox.getCharBoundaries(curIndex);
var rect:Sprite = new Sprite();
rect.graphics.beginFill(0x00FF00,.8);
rect.graphics.drawRect(0,0,startRect.width,startRect.height);
rect.graphics.endFill();
rect.x = startRect.x;
rect.y = startRect.y;
textBox.parent.addChild(rect);
//add img or movieclip
var tmpText:TextField = new TextField();
tmpText.text = arrFace[j];
rect.addChild(tmpText);
}
}
}
}
}
{
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.geom.Rectangle;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class TestTextField extends Sprite
{
private var textBox:TextField;
public function TestTextField()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
var bg:Sprite = new Sprite();
bg.graphics.beginFill(0xCCCCCC);
bg.graphics.drawRect(0,0,300,600);
bg.graphics.endFill();
this.addChild(bg);
textBox = new TextField();
textBox.autoSize = TextFieldAutoSize.LEFT;
textBox.multiline = true;
textBox.wordWrap = true;
textBox.width = 200;
textBox.text = "/:11/:13The 我 胡Ì 是 /:02 ab the /:03 with a /:04/:02/:01 as whye /:05 with a /:06 on egg /:07 with a /:02 /:02 /:55 中华人民共和国的成立,标志着100多年来半殖民地半封建的旧中国历史的 /:02 结束,揭开了中国历史的新篇章,使一个占世界人口近四分之一的大国成/:88为独立自主的国家,人民从此成为国家的主人/:77";
textBox.border = true;
bg.addChild(textBox);
replaceMarkToFace();
}
private function replaceMarkToFace():void
{
var reg:RegExp = /\/:[0-9]{2}/g;
var arrSplit:Array = textBox.text.split(reg);
var arrFace:Array = textBox.text.match(reg);
textBox.htmlText = textBox.htmlText.replace(reg,"<font size=\"24\">胡</font>");
var count:int = 0;
var arrIndex:Array = new Array();
for(var i:int=0;i<arrSplit.length;i++)
{
count++;
var len:int = arrSplit[i].toString().length;
count += len;
arrIndex.push(count);
}
for(var j:int=0;j<arrIndex.length;j++)
{
var curIndex:int = arrIndex[j]-1;
if(textBox.text.charCodeAt(curIndex)!=13)
{
trace(textBox.height);
var startRect:Rectangle = textBox.getCharBoundaries(curIndex);
var rect:Sprite = new Sprite();
rect.graphics.beginFill(0x00FF00,.8);
rect.graphics.drawRect(0,0,startRect.width,startRect.height);
rect.graphics.endFill();
rect.x = startRect.x;
rect.y = startRect.y;
textBox.parent.addChild(rect);
//add img or movieclip
var tmpText:TextField = new TextField();
tmpText.text = arrFace[j];
rect.addChild(tmpText);
}
}
}
}
}
with scrollbar
package
{
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import org.aswing.ASColor;
import org.aswing.AsWingConstants;
import org.aswing.AssetPane;
import org.aswing.JButton;
import org.aswing.JScrollPane;
import org.aswing.JViewport;
import org.aswing.geom.IntDimension;
public class Temp extends Sprite
{
private var textBox:TextField;
private var pane:AssetPane;
private var scrollPane:JScrollPane;
public function Temp()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
textBox = new TextField();
textBox.autoSize = TextFieldAutoSize.LEFT;
textBox.multiline = true;
textBox.wordWrap = true;
textBox.width = 200;
textBox.text = "ffffffffffffffffffffferewrfwerewfewwefwwrwwwwwwwwwwwww/:11/:13The 我 胡Ì 是 /:02 ab the /:03 with a /:04/:02/:01 as whye /:05 with a /:06 on egg /:07 with a /:02 /:02 /:55 中华人民共和国的成立,标志着100多年来半殖民地半封建的旧中国历史的 /:02 结束,揭开了中国历史的新篇章,使一个占世界人口近四分之一的大国成/:88为独立自主的国家,人民从此成为国家的主人/:77";
textBox.background = true;
textBox.backgroundColor = 0xFFFF00;
pane = new AssetPane(textBox);
scrollPane = new JScrollPane(pane,JScrollPane.SCROLLBAR_ALWAYS);
scrollPane.setLocationXY(50,50);
scrollPane.setPreferredSize(new IntDimension(300, 200));
var viewPort:JViewport = scrollPane.getViewport() as JViewport;
viewPort.setHorizontalAlignment(AsWingConstants.LEFT);
viewPort.setVerticalAlignment(AsWingConstants.TOP);
scrollPane.setOpaque(true);
scrollPane.setBackground(ASColor.BLUE);
scrollPane.pack();
addChild(scrollPane);
replaceMarkToFace();
var btn:JButton = new JButton("确定");
btn.setLocationXY(10,400);
btn.addEventListener(MouseEvent.CLICK,onClick);
btn.pack();
addChild(btn);
}
private function onClick(event:MouseEvent):void
{
textBox.htmlText += "<p><a href='http://www.baidu.com'>老爸</a>喜欢养/:88花";
replaceMarkToFace();
}
private function replaceMarkToFace():void
{
var reg:RegExp = /\/:[0-9]{2}/g;
var arrSplit:Array = textBox.text.split(reg);
var arrFace:Array = textBox.text.match(reg);
textBox.htmlText = textBox.htmlText.replace(reg,"<font size=\"24\">胡</font>");
var count:int = 0;
var arrIndex:Array = new Array();
for(var i:int=0;i<arrSplit.length;i++)
{
count++;
var len:int = arrSplit[i].toString().length;
count += len;
arrIndex.push(count);
}
for(var j:int=0;j<arrIndex.length;j++)
{
var curIndex:int = arrIndex[j]-1;
if(textBox.text.charCodeAt(curIndex)!=13&&curIndex<textBox.text.length)
{
trace(textBox.height);
var startRect:Rectangle = textBox.getCharBoundaries(curIndex);
var rect:Sprite = new Sprite();
rect.graphics.beginFill(0x00FF00,.8);
rect.graphics.drawRect(0,0,startRect.width,startRect.height);
rect.graphics.endFill();
rect.x = startRect.x;
rect.y = startRect.y;
rect.mouseEnabled = false;
textBox.parent.addChild(rect);
//var tmpText:TextField = new TextField();
//tmpText.text = arrFace[j];
//rect.addChild(tmpText);
}
}
pane.reload();
pane.pack();
pane.y = -1*pane.height;
}
}
}
{
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import org.aswing.ASColor;
import org.aswing.AsWingConstants;
import org.aswing.AssetPane;
import org.aswing.JButton;
import org.aswing.JScrollPane;
import org.aswing.JViewport;
import org.aswing.geom.IntDimension;
public class Temp extends Sprite
{
private var textBox:TextField;
private var pane:AssetPane;
private var scrollPane:JScrollPane;
public function Temp()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
textBox = new TextField();
textBox.autoSize = TextFieldAutoSize.LEFT;
textBox.multiline = true;
textBox.wordWrap = true;
textBox.width = 200;
textBox.text = "ffffffffffffffffffffferewrfwerewfewwefwwrwwwwwwwwwwwww/:11/:13The 我 胡Ì 是 /:02 ab the /:03 with a /:04/:02/:01 as whye /:05 with a /:06 on egg /:07 with a /:02 /:02 /:55 中华人民共和国的成立,标志着100多年来半殖民地半封建的旧中国历史的 /:02 结束,揭开了中国历史的新篇章,使一个占世界人口近四分之一的大国成/:88为独立自主的国家,人民从此成为国家的主人/:77";
textBox.background = true;
textBox.backgroundColor = 0xFFFF00;
pane = new AssetPane(textBox);
scrollPane = new JScrollPane(pane,JScrollPane.SCROLLBAR_ALWAYS);
scrollPane.setLocationXY(50,50);
scrollPane.setPreferredSize(new IntDimension(300, 200));
var viewPort:JViewport = scrollPane.getViewport() as JViewport;
viewPort.setHorizontalAlignment(AsWingConstants.LEFT);
viewPort.setVerticalAlignment(AsWingConstants.TOP);
scrollPane.setOpaque(true);
scrollPane.setBackground(ASColor.BLUE);
scrollPane.pack();
addChild(scrollPane);
replaceMarkToFace();
var btn:JButton = new JButton("确定");
btn.setLocationXY(10,400);
btn.addEventListener(MouseEvent.CLICK,onClick);
btn.pack();
addChild(btn);
}
private function onClick(event:MouseEvent):void
{
textBox.htmlText += "<p><a href='http://www.baidu.com'>老爸</a>喜欢养/:88花";
replaceMarkToFace();
}
private function replaceMarkToFace():void
{
var reg:RegExp = /\/:[0-9]{2}/g;
var arrSplit:Array = textBox.text.split(reg);
var arrFace:Array = textBox.text.match(reg);
textBox.htmlText = textBox.htmlText.replace(reg,"<font size=\"24\">胡</font>");
var count:int = 0;
var arrIndex:Array = new Array();
for(var i:int=0;i<arrSplit.length;i++)
{
count++;
var len:int = arrSplit[i].toString().length;
count += len;
arrIndex.push(count);
}
for(var j:int=0;j<arrIndex.length;j++)
{
var curIndex:int = arrIndex[j]-1;
if(textBox.text.charCodeAt(curIndex)!=13&&curIndex<textBox.text.length)
{
trace(textBox.height);
var startRect:Rectangle = textBox.getCharBoundaries(curIndex);
var rect:Sprite = new Sprite();
rect.graphics.beginFill(0x00FF00,.8);
rect.graphics.drawRect(0,0,startRect.width,startRect.height);
rect.graphics.endFill();
rect.x = startRect.x;
rect.y = startRect.y;
rect.mouseEnabled = false;
textBox.parent.addChild(rect);
//var tmpText:TextField = new TextField();
//tmpText.text = arrFace[j];
//rect.addChild(tmpText);
}
}
pane.reload();
pane.pack();
pane.y = -1*pane.height;
}
}
}
6. 自定义鼠标指针
MyCursor
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.ui.Mouse;
import flash.ui.MouseCursorData;
public class MyCursor extends Sprite
{
[Embed(source="pen.png")]
private var penImg:Class;
public function MyCursor()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
if(Mouse.supportsNativeCursor)
{
var mouseVector:Vector.<BitmapData> = new Vector.<BitmapData>();
var bmpData:BitmapData = (new penImg() as Bitmap).bitmapData;
mouseVector.push(bmpData);
var mcd:MouseCursorData = new MouseCursorData();
mcd.data = mouseVector;
//mcd.frameRate = 1;
Mouse.registerCursor("drawCursor",mcd);
Mouse.cursor = "drawCursor";
}
}
}
}
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.ui.Mouse;
import flash.ui.MouseCursorData;
public class MyCursor extends Sprite
{
[Embed(source="pen.png")]
private var penImg:Class;
public function MyCursor()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
if(Mouse.supportsNativeCursor)
{
var mouseVector:Vector.<BitmapData> = new Vector.<BitmapData>();
var bmpData:BitmapData = (new penImg() as Bitmap).bitmapData;
mouseVector.push(bmpData);
var mcd:MouseCursorData = new MouseCursorData();
mcd.data = mouseVector;
//mcd.frameRate = 1;
Mouse.registerCursor("drawCursor",mcd);
Mouse.cursor = "drawCursor";
}
}
}
}
7. 实时绘画
Painter
package
{
import com.adobe.serialization.json.JSON;
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import flash.events.NetStatusEvent;
import flash.events.TimerEvent;
import flash.net.NetConnection;
import flash.net.SharedObject;
import flash.utils.Timer;
public class Painter extends Sprite
{
private var fmsConnect:NetConnection;
private var line:Sprite;
private var trackSO:SharedObject;
private var trackList:String="";
private var clearTime:Timer;
private var isMouseDown:Boolean=false;
public function Painter()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
fmsConnect = new NetConnection();
fmsConnect.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
fmsConnect.connect("rtmp://xxx.xxx.xxx/live");
fmsConnect.client = this;
line = new Sprite();
line.graphics.lineStyle(2,0x0000FF);
this.addChild(line);
var rect:Sprite = new Sprite();
rect.graphics.beginFill(0x00FF00);
rect.graphics.drawRect(0,0,50,50);
rect.graphics.endFill();
rect.x = 300;
rect.y = 100;
rect.addEventListener(MouseEvent.CLICK,onClick);
this.addChild(rect);
}
private function onClick(event:MouseEvent):void
{
trackList = "clear";
}
private function netStatusHandler(event:NetStatusEvent):void
{
switch(event.info.code)
{
case "NetConnection.Connect.Success":
stage.addEventListener(MouseEvent.MOUSE_DOWN,stage_mouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP,stage_mouseUpHandler);
stage.addEventListener(MouseEvent.MOUSE_MOVE,stage_mouseMoveHandler);
trackSO = SharedObject.getRemote("trackRemote",fmsConnect.uri,false);
trackSO.connect(fmsConnect);
var trackTimer:Timer = new Timer(4000);
trackTimer.addEventListener(TimerEvent.TIMER,trackTimer_TimerHandler);
trackTimer.start();
clearTime = new Timer(10000);
clearTime.addEventListener(TimerEvent.TIMER,clearTimer_TimerHandler);
clearTime.start();
break;
}
}
private function stage_mouseDownHandler(event:MouseEvent):void
{
clearTime.reset();
clearTime.start();
isMouseDown = true;
line.graphics.moveTo(mouseX,mouseY);
var obj:Object = new Object();
obj.time = flash.utils.getTimer();
obj.x = mouseX;
obj.y = mouseY;
obj.type = "s";
var str:String = encodeToJSON(obj);
if(trackList=="clear")
{
trackList = "";
}
if(trackList=="")
{
trackList += str;
}
else
{
trackList += "|"+str;
}
}
private function stage_mouseUpHandler(event:MouseEvent):void
{
isMouseDown = false;
}
private function stage_mouseMoveHandler(event:MouseEvent):void
{
if(isMouseDown)
{
clearTime.reset();
clearTime.start();
line.graphics.lineTo(mouseX,mouseY);
var obj:Object = new Object();
obj.time = flash.utils.getTimer();
obj.x = mouseX;
obj.y = mouseY;
obj.type = "p";
var str:String = encodeToJSON(obj);
if(trackList=="clear")
{
trackList = "";
}
if(trackList=="")
{
trackList += str;
}
else
{
trackList += "|"+str;
}
}
}
private function trackTimer_TimerHandler(event:TimerEvent):void
{
trackSO.setProperty("track",trackList);
}
private function clearTimer_TimerHandler(event:TimerEvent):void
{
trackList = "clear";
trackSO.setProperty("track",trackList);
}
public function onBWDone():void
{
}
public function onMetaData(...args):void
{
}
public function encodeToJSON(obj:Object):String
{
return com.adobe.serialization.json.JSON.encode(obj);
}
}
}
{
import com.adobe.serialization.json.JSON;
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import flash.events.NetStatusEvent;
import flash.events.TimerEvent;
import flash.net.NetConnection;
import flash.net.SharedObject;
import flash.utils.Timer;
public class Painter extends Sprite
{
private var fmsConnect:NetConnection;
private var line:Sprite;
private var trackSO:SharedObject;
private var trackList:String="";
private var clearTime:Timer;
private var isMouseDown:Boolean=false;
public function Painter()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
fmsConnect = new NetConnection();
fmsConnect.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
fmsConnect.connect("rtmp://xxx.xxx.xxx/live");
fmsConnect.client = this;
line = new Sprite();
line.graphics.lineStyle(2,0x0000FF);
this.addChild(line);
var rect:Sprite = new Sprite();
rect.graphics.beginFill(0x00FF00);
rect.graphics.drawRect(0,0,50,50);
rect.graphics.endFill();
rect.x = 300;
rect.y = 100;
rect.addEventListener(MouseEvent.CLICK,onClick);
this.addChild(rect);
}
private function onClick(event:MouseEvent):void
{
trackList = "clear";
}
private function netStatusHandler(event:NetStatusEvent):void
{
switch(event.info.code)
{
case "NetConnection.Connect.Success":
stage.addEventListener(MouseEvent.MOUSE_DOWN,stage_mouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP,stage_mouseUpHandler);
stage.addEventListener(MouseEvent.MOUSE_MOVE,stage_mouseMoveHandler);
trackSO = SharedObject.getRemote("trackRemote",fmsConnect.uri,false);
trackSO.connect(fmsConnect);
var trackTimer:Timer = new Timer(4000);
trackTimer.addEventListener(TimerEvent.TIMER,trackTimer_TimerHandler);
trackTimer.start();
clearTime = new Timer(10000);
clearTime.addEventListener(TimerEvent.TIMER,clearTimer_TimerHandler);
clearTime.start();
break;
}
}
private function stage_mouseDownHandler(event:MouseEvent):void
{
clearTime.reset();
clearTime.start();
isMouseDown = true;
line.graphics.moveTo(mouseX,mouseY);
var obj:Object = new Object();
obj.time = flash.utils.getTimer();
obj.x = mouseX;
obj.y = mouseY;
obj.type = "s";
var str:String = encodeToJSON(obj);
if(trackList=="clear")
{
trackList = "";
}
if(trackList=="")
{
trackList += str;
}
else
{
trackList += "|"+str;
}
}
private function stage_mouseUpHandler(event:MouseEvent):void
{
isMouseDown = false;
}
private function stage_mouseMoveHandler(event:MouseEvent):void
{
if(isMouseDown)
{
clearTime.reset();
clearTime.start();
line.graphics.lineTo(mouseX,mouseY);
var obj:Object = new Object();
obj.time = flash.utils.getTimer();
obj.x = mouseX;
obj.y = mouseY;
obj.type = "p";
var str:String = encodeToJSON(obj);
if(trackList=="clear")
{
trackList = "";
}
if(trackList=="")
{
trackList += str;
}
else
{
trackList += "|"+str;
}
}
}
private function trackTimer_TimerHandler(event:TimerEvent):void
{
trackSO.setProperty("track",trackList);
}
private function clearTimer_TimerHandler(event:TimerEvent):void
{
trackList = "clear";
trackSO.setProperty("track",trackList);
}
public function onBWDone():void
{
}
public function onMetaData(...args):void
{
}
public function encodeToJSON(obj:Object):String
{
return com.adobe.serialization.json.JSON.encode(obj);
}
}
}
Viewer
package
{
import com.adobe.serialization.json.JSON;
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.events.NetStatusEvent;
import flash.events.SyncEvent;
import flash.net.NetConnection;
import flash.net.SharedObject;
import flash.utils.setTimeout;
public class Viewer extends Sprite
{
private var fmsConnect:NetConnection;
private var line:Sprite;
private var trackSO:SharedObject;
private var trackArray:Array;
private var count:int = 0;
public function Viewer()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
fmsConnect = new NetConnection();
fmsConnect.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
fmsConnect.connect("rtmp://xxx.xxx.xxx/live");
fmsConnect.client = this;
line = new Sprite();
line.graphics.lineStyle(2,0x0000FF);
line.graphics.moveTo(100,100);
this.addChild(line);
}
private function netStatusHandler(event:NetStatusEvent):void
{
switch(event.info.code)
{
case "NetConnection.Connect.Success":
trackSO = SharedObject.getRemote("trackRemote",fmsConnect.uri,false);
trackSO.addEventListener(SyncEvent.SYNC,syncHandler);
trackSO.connect(fmsConnect);
break;
}
}
private function syncHandler(event:SyncEvent):void
{
if(!trackSO.data["track"])
{
return;
}
var str:String = trackSO.data["track"].toString();
if(str=="clear")
{
count=0;
if(trackArray!=null)
{
trackArray.splice(0);
}
return;
}
trackArray = str.split("|");
trackArray.reverse();
if(count>0)
{
trackArray.splice(trackArray.length-count);
}
if(trackArray.length>1)
{
var objInfo1:Object = com.adobe.serialization.json.JSON.decode(trackArray[trackArray.length-1].toString());
var objInfo2:Object = com.adobe.serialization.json.JSON.decode(trackArray[trackArray.length-2].toString());
if(objInfo1.type=="s")
{
line.graphics.moveTo(objInfo1.x,objInfo1.y);
}
else
{
line.graphics.lineTo(objInfo1.x,objInfo1.y);
}
count++;
var timeSpan:int = objInfo2.time - objInfo1.time;
trackArray.splice(trackArray.length-1,1);
setTimeout(draw,timeSpan);
}
}
private function draw():void
{
if(trackArray.length>1)
{
var objInfo1:Object = com.adobe.serialization.json.JSON.decode(trackArray[trackArray.length-1].toString());
var objInfo2:Object = com.adobe.serialization.json.JSON.decode(trackArray[trackArray.length-2].toString());
if(objInfo1.type=="s")
{
line.graphics.moveTo(objInfo1.x,objInfo1.y);
}
else
{
line.graphics.lineTo(objInfo1.x,objInfo1.y);
}
count++;
var timeSpan:int = objInfo2.time - objInfo1.time;
trackArray.splice(trackArray.length-1,1);
setTimeout(draw,timeSpan);
}
else if(trackArray.length==1)
{
var objInfo3:Object = com.adobe.serialization.json.JSON.decode(trackArray[trackArray.length-1].toString());
if(objInfo3.type=="s")
{
line.graphics.moveTo(objInfo3.x,objInfo3.y);
}
else
{
line.graphics.lineTo(objInfo3.x,objInfo3.y);
}
count++;
trackArray.splice(0);
}
}
public function onBWDone():void
{
}
public function onMetaData(...args):void
{
}
public function encodeToJSON(obj:Object):String
{
return com.adobe.serialization.json.JSON.encode(obj);
}
}
}
{
import com.adobe.serialization.json.JSON;
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.events.NetStatusEvent;
import flash.events.SyncEvent;
import flash.net.NetConnection;
import flash.net.SharedObject;
import flash.utils.setTimeout;
public class Viewer extends Sprite
{
private var fmsConnect:NetConnection;
private var line:Sprite;
private var trackSO:SharedObject;
private var trackArray:Array;
private var count:int = 0;
public function Viewer()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
fmsConnect = new NetConnection();
fmsConnect.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
fmsConnect.connect("rtmp://xxx.xxx.xxx/live");
fmsConnect.client = this;
line = new Sprite();
line.graphics.lineStyle(2,0x0000FF);
line.graphics.moveTo(100,100);
this.addChild(line);
}
private function netStatusHandler(event:NetStatusEvent):void
{
switch(event.info.code)
{
case "NetConnection.Connect.Success":
trackSO = SharedObject.getRemote("trackRemote",fmsConnect.uri,false);
trackSO.addEventListener(SyncEvent.SYNC,syncHandler);
trackSO.connect(fmsConnect);
break;
}
}
private function syncHandler(event:SyncEvent):void
{
if(!trackSO.data["track"])
{
return;
}
var str:String = trackSO.data["track"].toString();
if(str=="clear")
{
count=0;
if(trackArray!=null)
{
trackArray.splice(0);
}
return;
}
trackArray = str.split("|");
trackArray.reverse();
if(count>0)
{
trackArray.splice(trackArray.length-count);
}
if(trackArray.length>1)
{
var objInfo1:Object = com.adobe.serialization.json.JSON.decode(trackArray[trackArray.length-1].toString());
var objInfo2:Object = com.adobe.serialization.json.JSON.decode(trackArray[trackArray.length-2].toString());
if(objInfo1.type=="s")
{
line.graphics.moveTo(objInfo1.x,objInfo1.y);
}
else
{
line.graphics.lineTo(objInfo1.x,objInfo1.y);
}
count++;
var timeSpan:int = objInfo2.time - objInfo1.time;
trackArray.splice(trackArray.length-1,1);
setTimeout(draw,timeSpan);
}
}
private function draw():void
{
if(trackArray.length>1)
{
var objInfo1:Object = com.adobe.serialization.json.JSON.decode(trackArray[trackArray.length-1].toString());
var objInfo2:Object = com.adobe.serialization.json.JSON.decode(trackArray[trackArray.length-2].toString());
if(objInfo1.type=="s")
{
line.graphics.moveTo(objInfo1.x,objInfo1.y);
}
else
{
line.graphics.lineTo(objInfo1.x,objInfo1.y);
}
count++;
var timeSpan:int = objInfo2.time - objInfo1.time;
trackArray.splice(trackArray.length-1,1);
setTimeout(draw,timeSpan);
}
else if(trackArray.length==1)
{
var objInfo3:Object = com.adobe.serialization.json.JSON.decode(trackArray[trackArray.length-1].toString());
if(objInfo3.type=="s")
{
line.graphics.moveTo(objInfo3.x,objInfo3.y);
}
else
{
line.graphics.lineTo(objInfo3.x,objInfo3.y);
}
count++;
trackArray.splice(0);
}
}
public function onBWDone():void
{
}
public function onMetaData(...args):void
{
}
public function encodeToJSON(obj:Object):String
{
return com.adobe.serialization.json.JSON.encode(obj);
}
}
}
8. 播放RTMP服务器上的视频
package { import flash.display.Sprite; import flash.events.NetStatusEvent; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; public class PlayVideo extends Sprite { private var nc:NetConnection; private var ns:NetStream; private var video:Video; public function PlayVideo() { trace("init"); nc = new NetConnection(); nc.connect("rtmp://fms.xxx.com:25/vod"); nc.client=this; nc.addEventListener(NetStatusEvent.NET_STATUS,onStatusHandler); } private function onStatusHandler(evt:NetStatusEvent):void { trace(evt.info.code); if(evt.info.code=="NetConnection.Connect.Success") { ns=new NetStream(nc); ns.addEventListener(NetStatusEvent.NET_STATUS,onStatusHandler); ns.client=this; video=new Video(); video.attachNetStream(ns); ns.play("video/testconn"); addChild(video); } } public function onPlayStatus(info:Object):void { trace("onPlayStatus:"+info.code); if(info.code == "Netstream.Play.Complete"){ trace("Complete") } } public function onBWDone():void { } public function onMetaData(...args):void { } } }