2011-01-07 46 views
0

我有一個應用程序,我希望擁有儘可能多的FLV播放器(每個只播放一個視頻),並由XML控制。我控制一些變量(膚色,玩家x和y等)。 我的代碼正在工作,但有一些問題,所以我需要幫助來優化我的代碼。 問題之一是對視頻全屏,我把一個視頻在全屏和其他進入全屏...等問題肌膚的α,自動播放情況太..Actionscript 3帶有XML和For-Loop的FlvPlayback

我的AS3

import fl.video.*; 
import flash.events.ProgressEvent; 
import fl.controls.ProgressBar; 
import fl.controls.ProgressBarMode; 

var my_videos:XMLList; 
var my_total:Number; 
var my_player:FLVPlayback; 
var player_skin_color:Number; 
var player_skin_alpha:Number; 
var auto_play:Boolean; 

var videoArray:Array = new Array(); 

var myXMLLoader:URLLoader = new URLLoader(); 
myXMLLoader.load(new URLRequest("test.xml")); 
myXMLLoader.addEventListener(Event.COMPLETE, processXML); 

function processXML(e:Event):void { 

var myXML:XML = new XML(e.target.data); 

my_videos = myXML.VIDEO; 
my_total = my_videos.length(); 

makePlayer(); 
positionPlayer(); 
} 


function makePlayer():void { 

for (var i:int = 0; i < my_total; i++) { 

my_player = new FLVPlayback(); 
my_player.skin = "SkinOverPlayFullscreen.swf"; 
my_player.skinBackgroundColor = player_skin_color; 
my_player.skinBackgroundAlpha = player_skin_alpha; 
my_player.autoPlay = auto_play; 

player_skin_color = my_videos[i]. @ PLAYER_SKIN_COLOR; 
player_skin_alpha = my_videos[i]. @ PLAYER_SKIN_ALPHA; 
auto_play = my_videos[i]. @ VIDEO_AUTOPLAY; 

addChild(my_player); 
videoArray.push(my_player); 
my_player.source = my_videos[i]. @ URL; 
} 
} 

function positionPlayer():void { 

for (var i:int = 0; i < my_total; i++) 
{ 
videoArray[i].x = my_videos[i] . @PLAYER_X; 
videoArray[i].y = my_videos[i] . @PLAYER_Y; 
videoArray[i].width = my_videos[i] . @PLAYER_WIDTH; 
videoArray[i].height = my_videos[i] . @PLAYER_HEIGHT; 

} 
} 

我的XML

<?xml version="1.0" encoding="utf-8"?> 
<content> 

    <VIDEO PLAYER_X="450" PLAYER_Y="0" PLAYER_WIDTH="400" PLAYER_HEIGHT="300" PLAYER_SKIN_COLOR="0x0000FF" PLAYER_SKIN_ALPHA="1" VIDEO_AUTOPLAY="true" URL="test.flv"></VIDEO> 

    <VIDEO PLAYER_X="0" PLAYER_Y="0" PLAYER_WIDTH="400" PLAYER_HEIGHT="300" PLAYER_SKIN_COLOR="0x333333" PLAYER_SKIN_ALPHA="1" VIDEO_AUTOPLAY="true" URL="test2.flv"></VIDEO> 

</content> 

UPDATE:

import flash.display.StageDisplayState; 
import flash.display.StageAlign; 
import flash.display.StageScaleMode; 

stage.align = StageAlign.TOP_LEFT; 
stage.scaleMode = StageScaleMode.NO_SCALE; 

function goFullScreen():void 
{ 
if (stage.displayState == StageDisplayState.NORMAL) { 
stage.displayState=StageDisplayState.FULL_SCREEN; 
} else { 
stage.displayState=StageDisplayState.NORMAL; 
} 
} 


//GREENSOCK LIQUID LAYOUT 

var ls:LiquidStage = new LiquidStage(this.stage,900,600,900,600); 

ls.attach(video_container_mc, ls.CENTER, false, true, 0); 

回答

1
import fl.video.*; 
import flash.events.ProgressEvent; 
import fl.controls.ProgressBar; 
import fl.controls.ProgressBarMode; 

var my_videos:XMLList; 
var my_total:Number; 
var player_skin_color:Number; 
var player_skin_alpha:Number; 
var auto_play:Boolean; 

var videoArray:Array = new Array(); 

var myXMLLoader:URLLoader = new URLLoader(); 
myXMLLoader.load(new URLRequest("test.xml")); 
myXMLLoader.addEventListener(Event.COMPLETE, processXML); 

function processXML(e:Event):void { 

var myXML:XML = new XML(e.target.data); 

my_videos = myXML.VIDEO; 
my_total = my_videos.length(); 

makePlayer(); 
positionPlayer(); 
} 


function makePlayer():void { 

for (var i:int = 0; i < my_total; i++) { 

var my_player:FLVPlayback = new FLVPlayback(); 
my_player.name = "FLVplayer_" + i; 
my_player.skin = "SkinOverPlayFullscreen.swf"; 

player_skin_color = my_videos[i][email protected]_SKIN_COLOR; 
player_skin_alpha = my_videos[i][email protected]_SKIN_ALPHA; 
auto_play = my_videos[i][email protected]_AUTOPLAY; 

my_player.skinBackgroundColor = player_skin_color; 
my_player.skinBackgroundAlpha = player_skin_alpha; 
my_player.autoPlay = auto_play; 

my_player.source = my_videos[i][email protected]; 
videoArray.push(my_player); 

addChild(my_player); 
} 
} 

function positionPlayer():void { 

for (var i:int = 0; i < my_total; i++) 
{ 
videoArray[i].x = my_videos[i][email protected]_X; 
videoArray[i].y = my_videos[i][email protected]_Y; 
videoArray[i].width = my_videos[i][email protected]_WIDTH; 
videoArray[i].height = my_videos[i][email protected]_HEIGHT; 

} 
} 
0

每次添加在my_player上創建的FLVPlayback實例時。

代替

my_player = new FLVPlayback(); 

嘗試

//Create an array for the players 
var my_players:Array = new Array(); 

//Add the player instances to the array 
my_players.push (new FLVPlayback()); 

應該解決的其他問題。

羅布

+0

您好,感謝您的回答,一個問題,因爲你的方法應該刪除了videoArray? – Sbml 2011-01-07 16:44:17

+0

我用你的代碼嘗試了幾件事情,但我遇到了同樣的問題。我沒有錯誤,但視頻不會顯示。 – Sbml 2011-01-07 17:07:46