| Name |
FXデザイン
|
| Date |
2008年03月26日 (水) 03時17分 |
| Message |
いつも初歩的な質問で恐縮です。Playbackコンポーネント上で01.flv、02.flv、03.flvを再生したいと思っています。01.flvをスタートする前にPlaybackコンポーネント上に透かしのボタン1を表示させクリックでスタート。01.flvの再生終了後に01.flvの最終フレームが表示した状態で02.flvに進むための透かしボタン2を表示させ、押されたら02.flvが始まるというような流れで次々と進みたいと思っています。透かしボタンは共通ではなくそれぞれのflvで分けたボタンを想定しています。どなたかご教授ください。よろしくお願いします。 |
Response
01
|
| 2008年03月26日
(水) 11時00分> TOYAMA
|
|
1フレーム(1フレームのみとします)に下記のスクリプトを書けばよいでしょう。しかし「my_FLVPlybk」はPlaybackコンポーネントのインスタンス名です。ここでは、半透明ボタンは(インスタンス名「video_btn」)1個としていますが、これを修正すれば複数のボタンにも対応することは容易でしょう。
import mx.video.*;
var videoArray=["video1.flv","video2.flv","video3.flv"];
var m:Number=0;
video_btn._alpha=40;
my_FLVPlybk.autoPlay = false;
var listenerObject:Object = new Object();
listenerObject.complete = function(eventObject:Object):Void {
video_btn._visible=true;
};
my_FLVPlybk.addEventListener("complete", listenerObject);
my_FLVPlybk.contentPath = videoArray[0];
function videoPlay(){
my_FLVPlybk.contentPath = videoArray[m];
my_FLVPlybk.play();
video_btn._visible=false;
m++;
if(m>=videoArray.length){
m=0;
}
}
video_btn.onRelease=function(){
videoPlay();
}
http://www.geocities.jp/jin_toyama/index.html
|
|
Response
02
|
| 2008年03月26日
(水) 19時02分> FXデザイン
|
|
TOYAMAさん いつもありがとうございます。
問題なく処理できました。感謝。
現状のコンテンツではこれで全く問題ありませんが、
次のflvを再生する際にバッファリングする間隔が空いてしまう
これを回避する方法はあるのでしょうか?
可能なら教えて頂けませんか?
|
|
Response
03
|
| 2008年03月26日
(水) 21時42分> TOYAMA
|
|
Flash
8 Proでは、FLVPlaybackコンポーネントで使用できるレーヤーの機能を使用して、レーヤーを切り替えて再生する機能があります。これを使用してみるとよいでしょう。
1フレーム(1フレームのみとします)に下記のスクリプトを書いて下さい。
import mx.video.*;
video_btn._alpha = 30;
var videoArray = ["video1.flv", "video2.flv", "video3.flv"];
my_FLVPlybk.contentPath = videoArray[0];//レーヤー0を設定したことになる
var m:Number = -1;
my_FLVPlybk.autoPlay=false;//ビデオの自動再生を行わない
my_FLVPlybk.autoRewind = false;//ビデオの再生終了時巻き戻しを行わない
var listenerObject:Object = new Object();//オブジェクトの生成
listenerObject.ready = function(eventObject:Object):Void {
//ビデオのレーヤーを作成準備する
// 2、3 番目のビデオプレーヤーを追加する
my_FLVPlybk.activeVideoPlayerIndex = 1;//レーヤー1を設定したことになる
my_FLVPlybk.contentPath = videoArray[1];//レーヤー1にビデオファイル名を設定
my_FLVPlybk.activeVideoPlayerIndex = 2;//レーヤー2を設定したことになる
my_FLVPlybk.contentPath = videoArray[2];//レーヤー2にビデオファイル名を設定
};
my_FLVPlybk.addEventListener("ready", listenerObject);//リスナーの設定
function videoPlay() {//ビデオのレーヤー切り替えと再生を行う関数
m++;
if (m>=videoArray.length) {
m = 0;
}
my_FLVPlybk.activeVideoPlayerIndex = m;//ビデオのレーヤー切り替えを行う
// 次のプレーヤーをアクティブにする
my_FLVPlybk.visibleVideoPlayerIndex = m;//ビデオのレーヤーを見えるようにする
//次のプレーヤーを表示する
my_FLVPlybk.play();// 新しいレーヤーの FLV 再生を開始する
}
//ビデオ再生終了時に呼び出される関数
listenerObject.complete = function(eventObject:Object):Void {
//trace("Completed");
video_btn._visible = true;//ボタンを表示する
};
//リスナーの設定
my_FLVPlybk.addEventListener("complete", listenerObject);
video_btn.onRelease = function() {//ボタンを押したときの動作を定義
videoPlay();
video_btn._visible = false;
};
http://www.geocities.jp/jin_toyama/index.html
|
|
Response
04
|
| 2008年03月27日
(木) 03時22分> FXデザイン
|
|
TOYAMAさん ありがとうございます。
スクリプトの書き方ひとつで
見え方の体感速度?が変わったかのようです。
すばらしい。バッチリです。
感謝します。
|
|
Response
05
|
| 2008年03月27日
(木) 06時17分> Toobad |
|
割り込みをお許し下さい。>TOYAMAさま。ここでのRes02で複数のボタンへの対応が分らない超ド級の初心者です。(これと同じ質問を探していたもので、、)3つのボタン(他インスタンス名「video_btn2」「video_btn3」とすると)スクリプトはどのように定義すればよいのでしょうか?フルソースを教えて頂けると助かるのですが。。。
また、これらのボタンはひとつのレイヤー上に重ねて配置しておくべきなのでしょうか?ボタンごとにレイヤー分けすべきなのでしょうか?ほんとド素人ですみません。
|
|
Response
06
|
| 2008年03月27日
(木) 12時56分> TOYAMA
|
|
Toobadさんの要望がありましたので、video1_btn〜video3_btnに対応したスクリプトの例を掲載しました。buttonArrayというボタンのインスタンス名の配列を作成して処理をして見ました。
なお、3つのボタンは同じレーヤーに置くこともできますが、別々のレーヤーに配置した方が扱い易いと思います。なお、ボタンは、順次video1_btn〜video3_btnの順に表示されます。そしてビデオと同期してこの動作を繰り返します。ビデオ、ボタンも3個の場合を取り上げましたが、個数を増やすことは容易にできるでしょう。
1フレーム(1フレームのみです)のアクションスクリプトを下記に掲載します。
import mx.video.*;
var videoArray = ["video1.flv", "video2.flv", "video3.flv"];//ビデオファイルの配列
var buttonArray=[video1_btn,video2_btn,video3_btn];//ボタンの配列
my_FLVPlybk.contentPath = videoArray[0];//レーヤー0を設定したことになる
var m:Number = -1;
var n:Number=-1;
for(var i:Number=0;i<buttonArray.length;i++){//ボタンの透明度を設定
buttonArray[i]._alpha=30;
}
my_FLVPlybk.autoPlay=false;//ビデオの自動再生を行わない
my_FLVPlybk.autoRewind = false;//ビデオの再生終了時巻き戻しを行わない
var listenerObject:Object = new Object();//オブジェクトの生成
listenerObject.ready = function(eventObject:Object):Void {//ビデオのレーヤーを作成準備する
// 2、3 番目のビデオプレーヤーを追加しする
my_FLVPlybk.activeVideoPlayerIndex = 1;//レーヤー1を設定したことになる
my_FLVPlybk.contentPath = videoArray[1];//レーヤー1にビデオファイル名を設定
my_FLVPlybk.activeVideoPlayerIndex = 2;//レーヤー2を設定したことになる
my_FLVPlybk.contentPath = videoArray[2];//レーヤー2にビデオファイル名を設定
};
my_FLVPlybk.addEventListener("ready", listenerObject);//リスナーの設定
function videoPlay() {//ビデオのレーヤー切り替えと再生を行う関数
m++;
if (m>=videoArray.length) {
m = 0;
}
my_FLVPlybk.activeVideoPlayerIndex = m;//ビデオのレーヤー切り替えを行う
// 次のプレーヤーをアクティブにする
my_FLVPlybk.visibleVideoPlayerIndex = m;//ビデオのレーヤーを見えるようにする
//次のプレーヤーを表示する
my_FLVPlybk.play();// 新しいプレーヤーとの FLV 再生を開始する
}
//ビデオ再生終了時に呼び出される関数
listenerObject.complete = function(eventObject:Object):Void {
//trace("Completed");
setButton();//必要なボタンを表示するように関数を呼び出す
};
//リスナーの設定
my_FLVPlybk.addEventListener("complete", listenerObject);
function setMouse(){//ボタンをマウスのクリックに反応するように設定する関数
for(var i:Number=0;i<buttonArray.length;i++){
buttonArray[i].onRelease=function(){
videoPlay();
controllButton();//すべてのボタンを表示しない
}
}
}
function controllButton(){//すべてのボタンを見えなくする関数
for(var i:Number=0;i<buttonArray.length;i++){
buttonArray[i]._visible=false;
}
}
function setButton(){//必要なボタンのみを表示する関数
n++;
if(n>=buttonArray.length){
n=0;
}
for(var i:Number=0;i<buttonArray.length;i++){
if(i==n){
buttonArray[i]._visible=true;
}else{
buttonArray[i]._visible=false;
}
}
}
setMouse();//最初にボタンをマウスのクリックに反応するように設定する関数を呼び出す
setButton();//最初にvideo1_btnだけを表示するように関数を呼び出す
http://www.geocities.jp/jin_toyama/index.html
|
|
Response
07
|
| 2008年03月27日
(木) 15時26分> Toobad |
|
あぁすばらしい。
やはりこんな応用は私にはまだまだ神の域です。
レイヤー処理まで丁寧に説明頂いたので
簡単にクリアしました。
ありがとうございました。
|
|