2011-01-07 14 views
0

私はアプリケーションを持っています。XMLで制御されているように、必要なだけ多くのFLVプレイヤー(それぞれ1つのビデオのみを再生する)が必要です。私はいくつかの変数(肌色、プレーヤーx、yなど)を制御します。 私のコードは動作していますが、いくつかの問題があるので、私は自分のコードを最適化するために助けが必要です。問題の 一つは、ビデオのフルスクリーン上で、私のAS3Actionscript 3 FlvPlayback(XMLとForループ)

..私はフルスクリーンで一つのビデオを入れ、もう一方はフルスクリーンに行く...と皮膚のアルファを持つ他の問題は、自動再生も起こる

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:

答えて

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をオーバーライドしています。クラス変数を使用する代わりに、ループ内でローカル変数を追加し、そのインスタンスが配列に追加されます。 また、スキンプロパティはプレーヤーインスタンスに追加した後で宣言されています。 – robertp

+0

ありがとうございます、あなたは絶対に正しいです!今、すべてのスキンとポジションがうまくいきます。フルスクリーンではありませんが、その奇妙なことに、例えばxmlで4つの動画がある場合、フルスクリーンボタンをクリックすると、最後の動画がフルスクリーンに表示されます。そして、2回目に、ビデオフルスクリーンをクリックすると、すべての動画がクラッシュして位置を変更します。私は完全な画面の衝突でフラッシュの問題だと思う。 – Sbml

+0

DisplayStateの変更を処理するコードを投稿した場合、問題の原因がわかります。 – robertp

0

FLVPlaybackインスタンスを追加するたびに、そのインスタンスをmy_playerに作成します。代わりに

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

+0

私はあなたのコードでいくつかのことを試しましたが、同じ問題があります。私にはエラーはありませんが、ビデオには問題はありません。 – Sbml

+0

こんにちは、私の答えは雄牛です。私の新しいものを見てください。 – robertp