プロが教えるわが家の防犯対策術!

2つのswfをぴったり同時に再生したいです。


お世話になります。

web画面の左端と右端に、縦長の2つのswfをぴったり同時に開始するように
再生したいと考えていますが、やり方で悩んでおります。

普通にswfを読み込むと、タイミングにずれが出るからです。

なお、再生はボタンを押すなどのアクションを待つのではなく、
自動で行いたいです。

考えた方法が以下の手順です。

1.ASのLoaderでswfを読み込むswfを左右に配置し、
  contentLoaderInfo.addEventListener(Event.COMPLETE,func1)で、
  swfのロードが終わったときに、func1でひとまず読み込んだswfをstopして
  他のswfから参照できるグローバル変数を1にする


2.そのとき、もう一方がグローバル変数を1にしたか確認し、
  1なら両方の読み込んだswfをplayする。

  終わっていなければ、0.1秒おきにグローバル変数を
  再度チェックして、グローバル変数が1になるまでループする。


こういったことが可能なのでしょうか?

お手数をおかけしますが、おわかりの方、ご教授お願い致します。

投稿日時 - 2010-01-15 14:09:42

A 回答 (2件)

daisukehiさん、


以下でどうでしょうか?
//----単純化した例です----
//l外部SWF読み込み用のloaderを2つ作っておく
var loader0:Loader=new Loader();
var loader1:Loader=new Loader();
addChild(loader0);
addChild(loader1);
loader1.x=400;//適当な位置決め

//制御変数も2つ作っておく
var flag0:Boolean=false;
var flag1:Boolean=false;

loader0.contentLoaderInfo.addEventListener(Event.INIT,x0Init,false,0,true);
loader1.contentLoaderInfo.addEventListener(Event.INIT,x1Init,false,0,true);
this.addEventListener(Event.ENTER_FRAME,xEnterframe,false,0,true);

//タイムラインで動く外部SWFを2つ作っておき、第一フレーム目に、stop();と記載しておく
loader0.load(new URLRequest("0.swf"));
loader1.load(new URLRequest("1.swf"));

function x0Init(e:Event):void {
flag0=true;//読み込み完了したら、trueにし、
}

function x1Init(e:Event):void {
flag1=true;//同様
}

function xEnterframe(e:Event):void {
if (flag0==true && flag1==true) {//両方trueなら、
MovieClip(e.target).loader0.content.play();//それぞれのcontent、即ち、0.swfや1.swfを始動させる
MovieClip(e.target).loader1.content.play();
this.removeEventListener(Event.ENTER_FRAME,xEnterframe);//不要なので、削除
}
}
    • good
    • 0
この回答へのお礼

joy_28さん
ご回答いただき、ありがとうございます。

1つのswfで、外部swfを2つ読み込み、
xプロパティで1つをうまく右端によせるわけですね。

間違っているかもしれませんが、
この場合、呼び出し元のswfのサイズを、
「画面の横幅分(左の端から右の端まで)」
としなくてはいけないのではないでしょうか?

そうしないと、呼び出し元のswfのサイズをはみ出した分は、
表示されないのではないかと思いました。


言葉足らずで申し訳ありません。
以下のように、web画面の中央部には、
普通のテキストなり画像なりを入れたいと考えています。
そのため、横幅分のswfをいれてしまうと、本文を表示出来なく
なってしまいます。

--------------------------------------------
サイト名
--------------------------------------------
swf  |         本文        | swf
    |                    |    
    |                    |    
    |                    |    
    |                    |    
    |                    |    
    |                    |    


もしお時間がありましたら、
再度お答えいただけると嬉しいです。

お礼日時:2010/01/18 14:45

間違っているかもしれませんが、


この場合、呼び出し元のswfのサイズを、
「画面の横幅分(左の端から右の端まで)」
としなくてはいけないのではないでしょうか?

1.先ず、同時再生は出来たのでしょうか?これが、主目的だったと思いますが。
2.位置は、main.swf(読み込み側)とsub0.swf/sub1.swfのサイズを設計し、その上で、どこに表示させるかを決めます。loaderは、外部swfを左上基準で読み込みますから、それを考慮し、且つ、本文のサイズも考慮し、全体サイズを決定する必要があります。

この回答への補足

joy_28さん、ご回答いただきありがとうございます。

失礼致しました。同時再生はjoy_28さんに教えていただいた方法で
行うことが出来ました。
ありがとうございました。

sub0.swf,sub1.swfが200*768だとすると、
main.swfはディスプレイ横の解像度別で作っておき、jsで解像度を取得して、
各自の環境の合ったサイズのswfを、横の解像度*768として
読み込むことになるのでしょうか?

間違っているかもしれませんが、
これだと本文を中心に入れることが出来ないのではないかと思いました。
CSSなどでうまく入れられたとしても、本文付近を右クリックしたときに
Flash Playerのメニューになってしまうのは避けたいと考えております。


それともmain.swfは200*768で作っておき、main.swfで読み込んだsub1.swfを
main.swfの外に表示する、ということが可能なのでしょうか?


お手数をおかけしますが、お時間がありましたら、
ご回答よろしくお願いします。


なお、全く別の方法ですが、
呼び出し元のmain.swfをmain_send.swf、main_receive.swfとして2つ作り、
LocalConnectionを使う方法を考えてみました。

receive側がsub.swfのロードが終わったら、クッキーを変更し、
send側はsub.swfのロードが終わったら完了フラグ変数を1にする。

send側のthis.addEventListener(Event.ENTER_FRAMEで
フレーム毎にsendの完了フラグとreceiveが変更するクッキーを見て、
両方ロードが完了していたら、
send側をplayして、receive側のsub.swfをplayする関数を呼び出す
というものです。
なお、sub.swfには1フレーム目にstopが入っています。

これだと少しだけ(1フレーム?)ずれるようです。

補足日時:2010/01/19 13:56
    • good
    • 0
この回答へのお礼

joy_28さん

上記の自分の発言への補足です。

main.swfは画面の横幅までのサイズとすると、
真ん中のテキスト部分で右クリックした場合にFlash Playerを
右クリックしたようになるのでは、と書いた件ですが、
CSSのz-indexを1、
真ん中のテキスト部分をz-index=2とすることで、解決しました。

ありがとうございました。
これで解決です。

このたびは本当にありがとうございました。

お礼日時:2010/01/19 21:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!