外部のムービークリップを予め読み込んでおいて(読み込んでいる間はNowLoadingさせる)順番に表示させるムービーを作成しています。

●時期によって外部のムービークリップを追加したり、入れ替えたり、順番を変えたりを簡単にできるようにしたいと考えています。
●順番に読み込んでいたのでは毎回ムービーが止まってしまうので、予め読み込んでおきたいと思っています。

以上のようなムービーを自分なりに調べたり試したりしているのですが、以下のようになってしまって、どうもうまくいきません。

▼loadMovie("url",target)を使って予め全て読み込むようにするには外部ファイル数分のtargetが必要になってしまった。
▼読み込んだ時点でムービーが始まってしまうので順番が来たときには外部ムービーのフレームが進んでしまっていた。
tellTarget (target) {
gotoAndPlay(1);
}
とやってみたが、うまくいかなかった。
▼loadMovieNumを使うと読み込まれた時点ですべて重なって表示されてしまう。
▼_root.target._visible = false;とやってみましたが表示されてしまった。読み込んだムービーは枠外に置く以外にうまい方法はないのでしょうか?非表示にはできないのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

以前、2つのムービーをそれぞれムービークリップに予め読み込んでおき、ムービー1が終了したらムービー2に切り替える方法をご紹介しましたので、よろしければご参照ください。



 ・2つのswfファイルをつなげている場合の一括ローディング方法
  http://okweb.jp/kotaeru.php3?q=1288226

基本的な考え方・個々のムービーの終了を検出する方法については、この質問でご紹介した通りの考え方が使えます。
上記の質問の場合はムービーが2つと決まっていましたので、最初からムービークリップを2つ配置しておけば済みました。
しかし、今回の件ではムービーの数が不定になる可能性があるため、予めムービークリップを配置しておけないところが難点なのだと思います。


Flash のバージョンが書かれていませんので何ですが、Flash 5 からは、ステージに配置したムービークリップをコピーする duplicateMovieClip というメソッドが使えるようになりました。
ステージには、コピー元になるムービークリップを1つだけ配置しておきます。
あとは、ムービーの数だけコピーしてそこにムービーを読み込むと、ムービークリップの数についての問題は解決できます。

コピーしてできたインスタンスには、固定の名前+通し番号で付けます。ここでは仮に、cell +番号とします。
この番号を変数( cell_no とします)で管理すると、文字列からインスタンスを操作する機能( eval 関数もしくは配列演算子[ ] )を利用して

 this[ "cell" + cell_no ]._visible = true;

このようにしてムービークリップを操作できます。
番号は連番になっていますから、1つのムービーが終わった時は、cell_no を +1 すれば、次のムービーを表示・再生できます。


残る問題は、ムービーを再生する順番や読み込む数ですが。
指定の順序通りに何かをさせたい時は、先述のように通し番号を利用する他に、配列変数を使う方法があります。
ムービーの名前を通し番号でつけなければならないとすると融通が利かなくなりますので、ここでは、配列変数を利用した例をご紹介します。

Flash の文字列操作では、指定の文字を区切り文字として文字列を分割し、配列変数に格納することができます。
また、文字列を外部のテキストファイルから変数として読み込むことも可能です。
この2点を利用して、ムービーのファイル名を列挙したテキストファイルを1つ用意し、それをもとにムービーファイル名を入れた配列変数(テーブルといいます)を作ります。
ムービーがいくつあるかは、作られた配列変数の要素数( Array.length で取得できます)を見れば分かります。
個数が分かれば for ループが利用できますから、ムービークリップをコピーしながら、配列変数に入っている順にムービーをロードします。
これで、ムービーがいくつあっても、再生したい順にセットしておく仕組みが出来上がります。

--------------------------------------

Flash では、メインのタイムラインが止まっていても、ムービークリップのタイムラインは動いています。
読み込むムービーのタイムラインは stop(); で止められますが、フレーム1に複数のフレームから成るムービークリップがある場合は、このタイムラインは動いてしまいます。
一番簡単なのは、#1の方とかぶりますけれど、個々のムービーの最初に空白のフレームを1つ作り、ここに stop(); を入れて止めておくことです。

それから、最後のフレームには、再生が終了したことを全体の指揮を執るムービーに伝えるために

 _parent.end_flg = true;

というスクリプトを入れてください。


読み込むムービーのファイル名は、テキストファイルで設定します。
この設定ファイルを”movie_list.txt”とすると、

 movie_name=movie1,movie2,movie3

このような形式で書いておきます。
loadVariables などでこれを読み込み、” , ”を区切り文字とし分割して、ファイル名を配列変数にそれぞれ格納します。
ムービーの個数や名前は、このテキストファイルを書き換えるだけで変更できます。


全体の指揮を執るムービーは、次のようなレイヤー構成にします。

 アクション:スクリプトを書きます。
 表示領域 :ムービーを読み込むための、コピー元のムービークリップを配置。
 完了率表示:ロードの進捗状況の表示用。

ムービーの流れは、次のようになります。

 フレーム1:初期設定と、ファイル名の読み込み
 フレーム2:テキストファイルの読み込み終了待ち。スクリプトはなし。
 フレーム3:テキストの読み込み終了後、ファイル名のテーブルを作成。
 フレーム4:ムービークリップをコピーしながら、ムービーを読み込む。
 フレーム5:ムービーの読み込み終了待ち。スクリプトはなし。
 フレーム6:ロード完了率の算出。全ムービーが読み込まれたら、最初のムービーだけを再生させる。
 フレーム7:再生中のムービーの再生終了を待つ。スクリプトはなし。
 フレーム8:再生するムービーの切り替え処理。


ステージには、フレーム4から8まで、コピー元になるムービークリップ(インスタンス名を cell_org とします)を配置します。
ムービーの大きさが固定であれば、塗りだけの四角形をムービークリップにして配置しておくと、ムービーが表示される場所が分かりやすくなります。
ただ、このムービークリップは常時表示されてしまいますので、onClipEvent(load) を利用して _visible を false にしておくといいでしょう。
なお、ムービークリップを duplicateMovieClip でコピーすると、コピー元に onClipEvent で設定されているアクションはコピーにも受け継がれます。
従ってコピーも最初は非表示になりますので、最初にコピーを非表示にしておく処理は省略できます。


各フレームのスクリプトは、次のようになります。
(各行頭に全角のスペースが入っています。コピーする際はご注意ください)


 ・フレーム1

  //現在再生中のムービークリップの番号を保持
  cell_no = 0;

  //各ムービーの再生終了フラグ:このフラグは各外部ムービーから操作される
  //再生終了時true、それ以外はfalse
  end_flg = false;

  //ムービーリストの読み込み
  System.useCodepage = true;
  this.loadVariables( "movie_list.txt" );


 ・フレーム3

  //ムービーリストの読み込み完了を待つ
  if( movie_name == undefined )
  {
   gotoAndPlay( _currentframe - 1 );
  }
  else
  {
   //読み込んだ文字列を”,”で分割し、ファイル名のテーブルを作る
   str = new String( movie_name );
   movie_tbl = str.split( "," );
  }

↑ここまでで、テキストファイルから読み込んだファイル名が movie_tbl という配列変数に格納されます。


 ・フレーム4

  //全ムービーの読み込み
  movie_max = movie_tbl.length;
  for( i = 0 ; i < movie_max ; i++ )
  {
   //表示用ムービークリップをコピー
   //位置はオリジナルに重ねておく
   cell_org.duplicateMovieClip( "cell" + i , i );
   this[ "cell" + i ]._x = cell.org._x;
   this[ "cell" + i ]._y = cell_org._y;

   //コピーしたムービークリップにムービーを読み込む
   this[ "cell" + i ].loadMovie( movie_tbl[ i ] + ".swf" );
  }


 ・フレーム6

  loaded = 0;
  total = 0;
  per = 0;

  //ロード済み容量および総容量を取得し、完了率を算出
  //全ムービーの合算で出す
  for( i = 0 ; i < movie_max ; i++ )
  {
   loaded += this[ "cell" + i ].getBytesLoaded();
   total += this[ "cell" + i ].getBytesTotal();
  }
  per = Math.floor( loaded / total * 100 );

  //全ムービーの読み込み終了を待つ
  if( per < 100 )
  {
   gotoAndPlay( _currentframe - 1 );
  }
  else
  {
   //最初のムービーだけ表示・再生し、先へ進む
   this[ "cell0" ]._visible = true;
   this[ "cell0" ].gotoAndPlay( 2 );

   gotoAndPlay( _currentframe + 1 );
  }

↑ここまでが、ムービーを読み込む処理です。
完了率は全ムービーの合算で、変数 per に%で入ります。
Now Loading 画面はフレーム4から6まで表示してください。


 ・フレーム8

  //各ムービーの再生終了を待つ
  if( ! end_flg )
  {
   gotoAndPlay( _currentframe - 1 );
  }
  else
  {
   //今のムービーを非表示・停止
   this[ "cell" + cell_no ]._visible = false;
   this[ "cell" + cell_no ].stop();

   //次のムービーがある場合は、それを表示
   cell_no++;
   if( cell_no <= movie_max )
   {
    this[ "cell" + cell_no ]._visible = true;
    this[ "cell" + cell_no ].gotoAndPlay( 2 );

    //次のムービーの再生終了を待つ
    end_flg = false;
    gotoAndPlay( _currentframe - 1 );
   }
   else
   {
    //再生するムービーがない場合は、ここで待機
    stop();
   }
  }


ポイントは、ムービークリップを番号で操作できるようにする仕組みと、ムービーを再生順にセットしておくことです。

超長文になってすみませんでした。
不明な点がありましたら、補足してください。

この回答への補足

大変分かりやすい回答をありがとうございました!
勉強になりました。
まだ試していないのですが、ちょっと質問させてください。

●System.useCodepage = true; の部分、
これは定義済みの定数か何かですか?
何をさせているのでしょうか?

●gotoAndPlay( _currentframe - 1 ); の部分、
stop();ではダメということですか?
フレーム2,5,7はこのための空きフレームということですか?

●テキストファイル読み込みに待ち時間を設けていますが、ファイルが軽くても、待たせないと正常に動かないということですか?

●私が試した時は_visibleが効かず、外部ファイルが表示されてしまったのですが、ロードの仕方が悪かったのでしょうか?その時は確か…
loadMovie("pittanko.swf",target);
target._visible = false;
としたと思うんですが、どうでしょう?

●各外部ファイルの1フレーム目にstop();と入れておけば表示されないようになりましたが、それに加えて
_visible = false;
としておくワケは何ですか?
gotoAndStop(1);あるいはgotoAndPlay(1);ではダメなのでしょうか?

答えていただいたのにさらに質問攻めして申し訳ありません。
よろしくお願いします。

補足日時:2005/04/20 22:51
    • good
    • 0

#2、3です。

度々すみません。


#2のスクリプトに誤りがありました。
フレーム8のスクリプトで、

 //次のムービーがある場合は、それを表示
 cell_no++;
 if( cell_no <= movie_max )

この if 文の条件は、正しくは

 if( cell_no < movie_max )

でした。
cell_no は 0 から始まっていますから、例えばムービーが5つ( movie_max = 5 )ある場合は cell_no = 4 の時まで if の条件が成立すればいいのですが、#2のスクリプトですと cell_no = 5 の時も成立してしまいます。

それから、#3の回答で System.useCodePage と書いてしまいましたけれど、厳密には System.useCodepage (” p ”が小文字)です。
#2のスクリプトでは正しい書き方になっています。

大変失礼いたしました。
この場をお借りして、訂正させていただきます。

----------------------------------------

MX 2004 では Java やC++を意識してか、オブジェクトをクラスと呼ぶようになりました。
クラスの継承は可能で、現にコンポーネントの制御クラスは、基本中の基本である MovieClip クラスの他に、いくつかのコンポーネントに共通する動作に関する制御をまとめた UIObject クラスや UIComponent クラスを継承しながら設計されています。
設計理念は立派ですが、おかげでヘルプはややこしく、難しく見える記述になりました ^^;

カスタムオブジェクトの作成や継承は、確か Flash 5 でもそれらしきことはできたはずで、別に MX 2004 になって初めて取り入れられたものではなかったと思います。
もっとも、MX 2004 は Flash 5 から比べると、クラスの設計をしやすくするなど、プログラミング言語としての基盤の整備も進んでいます。


MX 2004 が出て1年以上経ち、Flash Player 7 も大分普及しているかと思いますので、個人的には、旧世代からの過渡期は過ぎたかなと思っています。
最新の技術をフルに活かしたコンテンツを堪能してもらいたいのなら、最新のプレイヤーが必要だという旨の注意書きを出しておいて、プレイヤーをインストールしてから見てもらえるような工夫をしておけば済むことです。

より多くの人に見てもらいたい時は、もう少し敷居を下げて、Flash Player 5 、6 あたりをターゲットにしてはいかがでしょう。
ただ、Flash Player は 4 と 5 の間では ActionScript の文法が大きく変わっており、プレイヤーとしての設計も大々的に変更されています。
Flash Player 4 以前向けに作られたムービーを新しいバージョンで再生すると、逆に、意図しない動きになる場合もあるそうです。
新しいプレイヤーがそれなりに普及している環境下では、普遍性を重視するあまり古すぎるバージョン向けにするのも、これまた問題アリというわけですね。

ゲームやアプリケーションなどでもそうですけど、再生できるプレイヤーやハードを持っていなければ利用できないのは当然のことです。
Windows 版しか出ていないソフトを Mac ユーザーが使いたいと思っても、どうにもなりませんよね。
ちょっと傲慢な言い分かもしれませんけれど、そもそも Flash 自体が、閲覧者を選ぶ素材です。全ての人・どんな環境でも全く問題なく見てもらえる方法はありません。
何の目的で使うムービーだとか、どんな人を対象にしたいかで、書き出すバージョンや使うスクリプトを選ぶくらいの姿勢で、いいと思うのですが。

Macromedia ( Adobe に買収されたそうですが)の製品は、最新版の2世代前までしかアップグレードの対象にならないので、マイナーチェンジを繰り返してバージョン数だけ稼がれても困りますね。
バージョンごとに劇的な進歩がないと、ユーザーも買う気にはならないと思いますよ。


ちなみに、Adobe による買収の話についてはこちらをどうぞ。

 ・アドビ システムズ社がマクロメディア社を買収
  http://www.macromedia.com/jp/macromedia/proom/pr …
    • good
    • 0
この回答へのお礼

アドビがマイクロメディアを買収したんですね。知りませんでした。これでイラレのデータをフラッシュに持っていきやすくなるといいな~。

> 全ての人・どんな環境でも全く問題なく見てもらえる方法はありません。
そうですね。プレステ2のゲームがやりたきゃプレステ2買いますもんね。ましてFlashの最新プレイヤーは無償ですから、気にする必要はないのかもしれませんね。
IE5やNN4.7のころはCSSに随分悩まされましたが、最近は無視しています(^^;

> バージョンごとに劇的な進歩がないと、ユーザーも買う気にはならないと思いますよ。
そうか。そうですよね。開発側からみれば当然の話ですね。これからも進化し続けていくのかと考えると、使う側も常に勉強しないと手に負えなくなりそうですね(^^;;

質問に対する完璧な回答に加え、解説、そして制作に対する心構えまで、ご教授ありがとうございました。
何か学校に教わりにきているみたいでした。
また何か質問するかもしれませんがよろしくお願いいたします。

お礼日時:2005/04/23 11:00

#2です。



お使いの Flash のバージョンは何でしょうか?
Flash はバージョンによって、スクリプトの文法やオブジェクト( MX 2004 ではクラス)がかなり違っています。同じ動作をさせるにも効率よく作れたり、より安全に設計できたりと、様々なところに違いが出ます。
Flash の質問をする時はバージョンをはっきり書いておいた方が、いい回答が集まりますよ。


#2のスクリプトは、System.useCodePage を除いては Flash Player 5 (作成ツールは Flash 5 )以降で動きます。Flash 5 をお使いの場合は、System.・・・の1行を削除してください。
ムービークリップをコピーする duplicateMovieClip は、Flash Player 5 以上でないと使用できませんので、Flash 4 以前をお使いの場合は、#2のスクリプトそのものが動作しません。

--------------------------------------------

● System.useCodePage について

Flash だけでなくホームページのデータなどでもそうですが、日本語はそのままでは通信できません。
日本語を通信できるデータの形に変換するルールを、エンコードといいます。
このデータを元に戻して日本語と解釈する(デコードといいます)には、エンコードした時と同じルールで解析しなければなりません。
送り手と受け取った側とでルールが一致していない時に発生するのが、いわゆる文字化けという現象です。日本語を英語の文法で解釈しようとすると意味不明の文になってしまうのと、同じことです。

Flash Player 5 までは、Shift-JIS というエンコードが使われていました。Shift-JIS は長らく日本語の標準とされてきたエンコードで、今でも現役ではありますが、規格としては少々旧式です。
Flash Player 6 (作成ツールは Flash MX )以降は、UTF-8 が標準のエンコードとして採用されました。何も指示しなければ、ムービーの外部とやりとりする文字は全て、UTF-8 のルールに従って解釈されます。
しかし、Flash Player 6 でも Shift-JIS でエンコードされた文字を利用したい場合もあります。
System.useCodePage はこのための設定で、true で Shift-JIS 、false で UTF-8 になります。デフォルトでは false になっています。

Flash Player 5 では Shift-JIS しか解釈できませんから、読み込むテキストファイルを Shift-JIS で記録しておかなければなりません。
Windows のメモ帳では、名前を付けて保存する時にエンコードの形式を選択できます。「 ANSI 」が Shift-JIS にあたります。
System.・・・の1行は削除してください。

Flash Player 6 以降では、読み込むテキストファイルを Shift-JIS で記録した時は、System.useCodePage を true にしないと文字化けが発生します。
UTF-8 で記録した時は、この設定は不要になります。

なお、エンコードが問題になるのは日本語の場合だけなので、読み込む文字が半角文字に限られている時はあまり気にしなくても大丈夫です。


●フレーム間をループする理由について

フレームに設定したスクリプト(フレームアクション)は、再生ヘッドがフレームに来た、その時1度しか実行されません。
フレーム3・6・8で stop(); で再生ヘッドを止めてしまうと、変数の判断が行われるのも1回限りになってしまいます。
しかし、読み込みの状況や再生が終了したかどうかの情報は、最初の1回で変わっているのではなく、何フレームか後といいますか、しばらくしてから変化する情報です。これらを監視して処理を分岐するには、フレームアクションを繰り返し実行できる仕組みが必要です。

再生ヘッドを何度もセットすれば、その都度フレームアクションは実行されますが、Flash の仕様上、同じフレームに続けて再生ヘッドをセットすることはできないようになっています。
#2のスクリプトでは、フレーム2・5・7にダミーのフレームを作り、前のフレームとの間をループさせることで、フレーム3・6・8のアクションを繰り返し実行できるようにしています。

変数の値を監視するなら、こんな面倒なことをしなくても、while ループでもできるような気がします。
ところが、これも Flash の仕様で、1つのフレームでいつまでもループが続いていると、システムを保護するために「スクリプトが原因でムービーが遅くなっています」という警告が出て、ムービーを強制終了できるようになっています。
画像やムービーの読み込みには時間がかかるのが当たり前ですし、回線の速度や状況によっても変動します。
while ループでは上記の警告が出る可能性が高いので、この手の処理には不向きです。


●テキストファイルを読み込む時の待ち時間について

これはやってみた方が早いですね。
例えば、” test.txt ”というファイルの中身が

 test=sample

だとします。日本語(全角文字)ですらない、とても単純なデータです。

 this.loadVariables( "test.txt" );
 trace( test );

このように loadVariables のすぐ後で利用しようとすると、変数 test の内容は undefined (未定義)と表示されます。
しかし、2~3フレーム先で同じく trace アクションで見てみると、きちんと読み込まれているのが確認できます。
つまり、たとえ単純なテキストデータであっても、読み込みの命令を出した次の瞬間に読み込みが済んでいることは、まずありえないのです。
ローカル環境でもこうなのですから、ネットで公開して通信回線を介する時はなおさらです。

読み込むテキストが単なる表示用のメッセージなどなら、単にメッセージが表示されないだけの話で済みますが、今回のテキストデータはムービーのファイル名です。
この読み込みが失敗している、もしくは完了しないまま先に進むと、ムービーの読み込みも失敗してしまいます。
#2では省略しましたが、通信の途中で読み込みが失敗した時の対策なども入れるとより安全です。


● _visible について

load イベントは、普通はムービークリップがステージに登場した時1度しか発生しません。
しかし、loadMovie でムービーを読み込むと、読み込みが終了した時に再び発生します。
この時に、ムービークリップの一部の属性が初期化されます。_visible の設定は初期化される属性で、読み込みの前に予め設定してあっても取り消されてしまうようです。
(ちなみに、Flash MX 以降で onEnterFrame などのイベントハンドラで処理を定義した時も、外部画像やムービーが読み込まれた時点でこれらは全てクリアされてしまいます)

#2でも書きました通り、コピー元のムービークリップに onClipEvent アクションが設定されている時は、コピーにもこのアクションが受け継がれます。
コピー元を onClipEvent(load) アクションで非表示にしておくと、コピーもロード完了直後に非表示になります。
load イベントでも不安な時は、データが書き込まれる度に発生する( loadMovie で読み込んだ場合のみ) data というイベントを使って _visible を false にすると万全です。
data イベントは load と同様に、onClipEvent アクションで指定できます。

ムービーの最初に空白のキーフレームを入れ、stop(); で止めておくと何も表示されないので、_visible = false; と結果は全く同じです。
ですが、これは最初のフレームがたまたま空白で何も表示されないというだけのことで、ムービークリップは依然としてアクティブのまま、描画処理等も通常通り実行されます。
_visible を false にすると、ムービークリップは休止状態になり、描画処理や一部の処理が停止されます。
つまり、表示する必要がないなら最初から休止させた方が処理が軽くなるのではないかと思い、_visible を false にしています。

最初のキーフレームを空白にして stop(); で止めておく理由は、実は、非表示にすることが本来の目的ではありません。
ムービーの最初に複数のフレームからできているムービークリップを置く時や、タイムラインを使ってサウンドを鳴らす場合は、フレーム1で止めてもムービークリップのタイムラインは動くし、音も鳴ってしまいます。
このような場合は、最初のフレームを空白にしておいた方が簡単ですし、確実にムービーを停止しておくことができます。
最初のフレームでこれらの素材を絶対に利用しないのであれば、空白のキーフレームは不要で、単にフレーム1に stop(); 、再生する時は play(); でも構いません。

余談ですが。
MX 2004 の Professional 版では、スライドプレゼンテーションという機能が使えます。
これは、#2でご紹介した仕組みを更に発展させたものです。
原理としては、ムービークリップをいくつも重ね、表示するスライド(その正体はムービークリップ)の _visible だけを true に、その他のスライドは false にして休止状態にしています。
スライド用のムービークリップには独自のスクリプトが組み込まれており、_visible が false から true 、逆に true から false に変わった時にイベントが発生して、スライドが切り替わったことを検出できるように設計されているなど、普通のムービークリップにはない面白い機能があります。
しかし、ムービークリップが並んでいることには違いないので、スライドの最初に複数のフレームからできているムービークリップを配置すると、スライドが切り替わる頃にはムービークリップのアニメも進んでしまっているという、困った欠点があります。


度々長文になってすみませんでした。

この回答への補足

すみません。バージョンなどを書くのを忘れていましたね。バージョンはMX、OSはWindowsXPです。

スレッドをたてた一番最初の書き込みでそれは気づいていたのですが、追加書き込みができずに、そのまま忘れてしまっていました。(教えてgooを始めて使ったので勝手が分からなかったのです。すみません。)

それにしてもFlashのバージョンアップはいつも劇的ですよね。4から5に変わった時が特に違っていたので私は使うのをためらっていました。2004ではClassがあるということは、使いまわし度もさらに増してくるのでしょうか? バージョンによってこんなに違うと、サイト閲覧者の環境によってもかなり違うのでしょうね。便利になっていいものが作れるようになってもそれをフルに使っていいものかどうか、変革期には悩みます。

補足日時:2005/04/21 17:05
    • good
    • 0

"私であったら" と言う1つの方法をかきます。


最善の方法とも思えません。
ロードするムービーの1フレーム目を空フレームにしてはダメなのでようか?
そうするとかなり楽だと思います。

まず,読み込む全てのSWFファイルの1フレーム目を空フレームにして
stop();
を書いておきます。これで読み込まれても何も表示されません。
これを,「1.swf」,「2.swf」… とします。

次にメインのアニメーションに「target1」,「target2」…
というインスタンス名のムービークリップを作り,
1フレーム目のフレームに

loadMovie("1.swf", target1);
loadMovie("2.swf", target2);
   …   …

を書きます。
それで,ボタンか何かを用意して,ボタンであったら,
ボタン1には

on (release) {
target2.gotoAndStop(1);
target1.gotoAndPlay(2);
}

ボタン2には

on (release) {
target1.gotoAndStop(1);
target2.gotoAndPlay(2);

}

と書きます。簡単。
これで読み込んだムービーを枠外に置く必要はなくなります。

----------------------------------------------------

>> 読み込んだムービーは枠外に置く以外にうまい方法はないのでしょうか?

上の方法をしなかった場合でムービーは枠外に置く方法の1つを書いておきます。
簡単に書くと,
ムービークリップの座標をsetPropertyで見えないところにセットし,
そのムービークリップにムービーを読み込ませる。
という方法です。

個人的には座標を調べてその座標を指定する作業があまり好きでないので,
いつも,置きたい場所に違うアンカーとしてのムービークリップを置いて,そのアンカーの座標を取得させて,
その座標に,ターゲットのムービークリップをセットするようにしています。
「anc1」=表示させたい場所に置いておきます。
「anc2」=枠外に置いておきます。

メインムービーの1フレーム目のフレームアクションとして,

//それぞれのアンカーMCのx,y座標を取得
anc1_x = getProperty("anc1", _x);
anc1_y = getProperty("anc1", _y);
anc2_x = getProperty("anc2", _x);
anc2_y = getProperty("anc2", _y);
//ムービーを読み込ませたMCの座標を「anc2」=枠外にセット
setProperty("target1", _x, anc2_x);
setProperty("target1", _y, anc2_y);
setProperty("target2", _x, anc2_x);
setProperty("target2", _y, anc2_y);
//ターゲットにムービーをロードする
loadMovie("1.swf", "target1");
loadMovie("2.swf", "target2");

を書いて,欄外にセットしたアンカーの場所にMCを非難させておいて,
ボタンなどで,

on (release) {
setProperty("target1", _x, anc1_x);
setProperty("target1", _y, anc1_y);
target1.play();
}

などと命令します。
他のMCとかの制御がだんだんややこしくなるので,
やっぱり-------より上の方法を取りたいです。
    • good
    • 0
この回答へのお礼

なるほど! 上の方法なら簡単に非表示にできますね。ありがとうございます。

ただ、これだとファイル数が増えると「target1」,「target2」…と増やしていかなければならず、ボタンではなく順番に表示させるとしたら、全てのフレームに
target1.gotoAndStop(1);
target2.gotoAndPlay(2);
………
と入れなければ…
あ、でも、フレームを一つにして、ファイル数を変数に入れてやればwhileか何かでできるか?
ちょっとやってみます。

お礼日時:2005/04/20 21:40

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QT-ARA liveについて

今日初めて、T-ARAのライブに行き盛り上がってきました!!
そこでライブ中にみんなが掛け声していたのですが、なんと言っているのでしょうか!?

T-ARAに詳しいかた教えてください。

Aベストアンサー

自分は行ってないのでよく分かりませんが、多分、公式応援の事でしょう。


「t-ara 公式応援」と検索すればでてくると思いますよ!


参考にhttp://ameblo.jp/tarawota/theme-10038004555.html

Q外部テキストファイルより座標データを読み込み、ムービークリップを配置し画像を読み込ませる

たびたびすみません、追記いたします。
外部テキストファイルから座標を読み込み、ムービークリップを作成し、そのムービークリップに座標を割り当て、画像を読み込ませ、さらにそのムービークリップのロールオーバー時に、あらかじめ作成しておいたテキストボックスに店名と簡単な店舗詳細を表示するというスクリプトを組みたいのですが、なかなかうまくいきません。使いどころとしては地図にそれらのムービークリップを配置し、そのランドマーク画像にロールオーバーしたら店舗詳細が現れるといったものを作りたいです。いろいろなサイトや本を参考にしながら下記スクリプトを作成致しましたが、うまくうごきません。たぶんloadMovieの読み込みのタイミングあたりがおかしいのだと思いますが、ムービークリップを新規に作成するときに、フレームアクションで画像の読み込みとその後の処理をどうやって記述したらよいのかがわかりません。まだまだ知識不足なもので、どなたかご教授頂けないでしょうか?よろしく御願い致します。

↓フレームアクション↓
function makeMC(n) {
for (i=1; i<=n; i++) {
_root.createEmptyMovieClip("mc"+myLV["name"+i],i);
mmLD = new Object();
mmLD.onData = function(LDOK) {
if (LDOK) {
_root["mc"+myLV["name"+i]].onPress = function() {
_root.t_box.text_a.text = this["text_a"+i];
_root.t_box.text_b.text = this["text_b"+i];
};
_root["mc"+myLV["name"+i]].onRelease = _root["mc"+myLV["name"+i]].onReleaseOutside=function () {
_root.t_box.text_a.text = "";
_root.t_box.text_b.text = "";
};
} else {
trace("イメージファイルのロード失敗");
}
mmLD.loadMovie("images/"+i+".jpg");
};
}
}

myLV = new LoadVars();
myLV.onLoad = function(TEXTOK) {
if (TEXTOK) {
makeMC(this.mcNum);
for (i=1; i<=this.mcNum; i++) {
_root["mc"+this["name"+i]]._x = this["x"+i];
_root["mc"+this["name"+i]]._y = this["y"+i];
}
} else {
trace("テキストファイルのロード失敗");
}
};
myLV.load("mcdata.txt");

↓あらかじめ作成したムービークリップの詳細↓
インスタンス名「t_box」というムービークリップの中に「text_a」「text_b」というダイナミックテキストが入っております。

↓外部テキストファイル↓
mcNum=10&
&name1=1&x1=20&y1=20&text_a1=サンプル店名(1)&text_b1=店の説明(1)&
&name2=2&x2=40&y2=40&text_a2=サンプル店名(2)&text_b2=店の説明(2)&
&name3=3&x3=60&y3=60&text_a3=サンプル店名(3)&text_b3=店の説明(3)&
&name4=4&x4=80&y4=80&text_a4=サンプル店名(4)&text_b4=店の説明(4)&
&name5=5&x5=100&y5=100&text_a5=サンプル店名(5)&text_b5=店の説明(5)&
&name6=6&x6=120&y6=120&text_a6=サンプル店名(6)&text_b6=店の説明(6)&
&name7=7&x7=140&y7=140&text_a7=サンプル店名(7)&text_b7=店の説明(7)&
&name8=8&x8=160&y8=160&text_a8=サンプル店名(8)&text_b8=店の説明(8)&
&name9=9&x9=180&y9=180&text_a9=サンプル店名(9)&text_b9=店の説明(9)&
&name10=10&x10=200&y10=200&text_a10=サンプル店名(10)&text_b10=店の説明(10)

どうかよろしく御願い致します。

たびたびすみません、追記いたします。
外部テキストファイルから座標を読み込み、ムービークリップを作成し、そのムービークリップに座標を割り当て、画像を読み込ませ、さらにそのムービークリップのロールオーバー時に、あらかじめ作成しておいたテキストボックスに店名と簡単な店舗詳細を表示するというスクリプトを組みたいのですが、なかなかうまくいきません。使いどころとしては地図にそれらのムービークリップを配置し、そのランドマーク画像にロールオーバーしたら店舗詳細が現れるといったものを作り...続きを読む

Aベストアンサー

#1です。

> <?xml version="1.0" encoding="utf-8"?>
> <file>
> <fileNode name="1" x="20" y="20" text_a="店名(1)" text_b="店舗詳細(1)" />
> <fileNode name="2" x="40" y="40" text_a="店名(2)" text_b="店舗詳細(2)" />
> <fileNode name="3" x="60" y="60" text_a="店名(3)" text_b="店舗詳細(3)" />
> </file>
>
> という形にしたいのですが、

ということですが,
データを取ってくる取り方(変数の名指しのしかた)が違うだけのことで,
LoadVars も XML もほとんど同じですよ。

XML データに 「mcdata.xml」 という名前を付けて任意のフォルダに保存し,
そのフォルダにFlashの新規ドキュメントを作成して,
次のようなスクリプトをフレーム1に書いて,
「制御」→「ムービープレビュー」すると,XML内のデータの取得のしかた(呼び方)がわかると思います。

---------------------------------------------------
// XML インスタンスを作成
myXML = new XML();

// ★これが加わることがLoadVarsと違うくらい
// XML 内の余分な空白や改行を無視する設定にする
myXML.ignoreWhite = true;

// XMLがロードされたときに実行する関数の定義
myXML.onLoad = function(XMLOK) {
// XML のロードが成功すれば
if (XMLOK) {
// XML探査用関数 probeXML ↓ を実行させます
probeXML();
} else {
trace("XMLファイルのロード失敗");
}
};

// 外部XMLファイル「mcdata.xml」をロード
myXML.load("mcdata.xml");

//---XML内探査関数の定義---
function probeXML() {
trace("●myXML="+myXML);
trace("●myXML.firstChild="+myXML.firstChild);
trace("●myXML.firstChild.childNodes.length(データ数)="+myXML.firstChild.childNodes.length);
trace("●myXML.firstChild.childNodes[0]="+myXML.firstChild.childNodes[0]);
trace("●myXML.firstChild.childNodes[0].attributes.name="+myXML.firstChild.childNodes[0].attributes.name);
trace("●myXML.firstChild.childNodes[0].attributes.text_a="+myXML.firstChild.childNodes[0].attributes.text_a);
}
---------------------------------------------------

やたら横長ですが。


つまり,
書かれていらっしゃる XML の構造は,
次のようになっている(次のような名前で呼べる)ということです。

===================
<?xml version="1.0" encoding="utf-8"?>
<file> ←firstChild
  <fileNode name="1" ~略~ (1)" /> ←firstChild.childNodes[0]
         ↑firstChild.childNodes[0].attributes.name
  <fileNode name="2" ~略~ (2)" /> ←firstChild.childNodes[1]
  <fileNode name="3" ~略~ (3)" /> ←firstChild.childNodes[2]
</file>
===================
  

#1です。

> <?xml version="1.0" encoding="utf-8"?>
> <file>
> <fileNode name="1" x="20" y="20" text_a="店名(1)" text_b="店舗詳細(1)" />
> <fileNode name="2" x="40" y="40" text_a="店名(2)" text_b="店舗詳細(2)" />
> <fileNode name="3" x="60" y="60" text_a="店名(3)" text_b="店舗詳細(3)" />
> </file>
>
> という形にしたいのですが、

ということですが,
データを取ってくる取り方(変数の名指しのしかた)が違うだけのことで,
LoadVars も XML もほとんど同じですよ。

X...続きを読む

Qt-araのキュリ

t-araのキュリはどこにピアスをあけていますか~?
よかったら画像付きで教えてほしいです!

あと、t-araで、ピアスが開いてる位置がかわいい!っていう人の画像をのせていただけると光栄です!!

Aベストアンサー

この写真が一番わかりやすいでしょうか><
画質悪くなってわからなかったら↓を見てください。

http://media.paran.com/news/view.kth?dirnews=4087575&year=2011&pg=1&date=20111211&dir=1&company=sv&mode=company

右耳は私なりに探したけどありませんでした><

ソヨンちゃんは3、4コあけてますが他のメンバーは1コずつしかあけてなさそうです。

私はまだ中学生なのであけたらぶん殴られそうですが将来はソヨンちゃんみたいにしたいです。

Q外部ムービーの読み込みについて

特定のファイル(※1)を用意した上で、下記のことを行うには、どのような方法をとればよろしいでしょうか。

kiso1.exeを開くことで、kiso1.exeのレイヤー2とレイヤー3にkiso2.swfを読み込み、kiso2.swfのボタンアクションによってnet1.swfを読み込む。net1.swfのボタンアクションによって同じネット上にあるFLASHファイルを読み込み、またそのFLASHファイルのボタンアクションによってnet1.swfを読み込む。これらのファイルの中でkiso.exeの以外のものは、他人に作成させることも考えており、kiso1.exeに読み込ませるFLASHファイルのファイル名のみkiso2.swfと同じにすれば、kiso2.swfの設定(loadMovieのURLを変えるなど)によって読み込むFLASHファイルが管理外のネット上にあっても同様のことが行えるようにする。なお、kiso1.exeのレイヤー3に直接net1.swfを読み込ませることはできました。

使用ソフトは、FLASHMXです。よろしくお願いします。

※1
ローカルのMy Documentsフォルダの中にkiso1.exe(※2)とkisoフォルダ。kisoフォルダの中にkiso2.swf(※3)。管理するネット上にnet1.swf (※4)。

※2
下のレイヤーからレイヤー1、レイヤー2、レイヤー3。レイヤー1は、名前がシンボル1のムービークリップ。レイヤー2は、名前がシンボル2で、インスタンス名がusiroのムービークリップ。レイヤー3は、名前がシンボル3で、インスタンス名がmaeのムービークリップ。

※3
シンボルにインスタンス名がなく、レイヤー3のシンボルがボタンであること意外、kiso1.exeと同じ。

※4
レイヤーが2までしかなく、レイヤー2のシンボルがボタンであること意外、kiso2.swfと同じ。

特定のファイル(※1)を用意した上で、下記のことを行うには、どのような方法をとればよろしいでしょうか。

kiso1.exeを開くことで、kiso1.exeのレイヤー2とレイヤー3にkiso2.swfを読み込み、kiso2.swfのボタンアクションによってnet1.swfを読み込む。net1.swfのボタンアクションによって同じネット上にあるFLASHファイルを読み込み、またそのFLASHファイルのボタンアクションによってnet1.swfを読み込む。これらのファイルの中でkiso.exeの以外のものは、他人に作成させることも考えており、kiso1.exeに読み込ま...続きを読む

Aベストアンサー

#1&2 です。
#2の補足です。kiso/kiso2.swf が読み込まれない件に関しては,#2以上に書くことはできません。
この補足は,#2の後半部分

>> ただただただ…ただし。
>> 「kiso2.swf」は同じ物ですよね。
   ~省略~
>> あったら,当然,「usiro」ではなく,「mae」にswfがロードされますので,要注意です。

の補足です。

#2の最後に上記のように書きましたが,_root から書くと,そうなってしまいます。
ですから,_root の書き方をやめて,相対パスで書けば,
「usiro」は「usiro」,「mae」は「mae」にそれぞれ違うswfがロードされます。


---kiso/kiso2.swfのボタン------------------
on (release) {
loadMovie("http://~/net1.swf", this);
}
--------------------------------------

---ネット上net1.swfのボタン----------------
on (release) {
loadMovie("http://~/○○.swf", this);
}
--------------------------------------

---ネット上○○.swfのボタン----------------
on (release) {
loadMovie("http://~/net1.swf", this);
}
--------------------------------------

です。
ターゲットは "this" ではなく this です。"" を付けたらうまく行きませんでした。
ターゲットの "" についてですが,本家,
http://www.macromedia.com/jp/support/flash/ts/documents/fl0158.html
の例

例:"_root.targetClip"ターゲットパスにムービーをロードする。
loadMovie ("http://some.url.com/somemovie.swf", "_root.targetClip")

ともあるように,"" を付けるのが正式かと思っていました(います)が,
上で示した3つの場合は, "" があるとダメのようです。
なぜかという理由はすみませんがわかりません。

#1&2 です。
#2の補足です。kiso/kiso2.swf が読み込まれない件に関しては,#2以上に書くことはできません。
この補足は,#2の後半部分

>> ただただただ…ただし。
>> 「kiso2.swf」は同じ物ですよね。
   ~省略~
>> あったら,当然,「usiro」ではなく,「mae」にswfがロードされますので,要注意です。

の補足です。

#2の最後に上記のように書きましたが,_root から書くと,そうなってしまいます。
ですから,_root の書き方をやめて,相対パスで書けば,
「usiro」は「usiro...続きを読む

QFT_Memoryというオブジェクトは具体的にどのように定義されているの?

Cygwin+vim+ctagで
タグジャンプでFT_Memoryを調べていたら、
\cygwin\usr\include\freetype2\freetype\ftsystem.h内に

typedef struct FT_MemoryRec_* FT_Memory;



struct FT_MemoryRec_
{
void* user;
FT_Alloc_Func alloc;
FT_Free_Func free;
FT_Realloc_Func realloc;
};



typedef void* (*FT_Alloc_Func)( FT_Memory memory,long size );


いう風にループタグジャンプしていまい、ずーっと盥回し状態です。

FT_Memoryというオブジェクトは具体的にどのように定義されているのでしょうか?

Aベストアンサー

typedef struct FT_MemoryRec_* FT_Memory;
  ↓
FT_MemoryはFT_MemoryRec_型のオブジェクトを指すポインタ


typedef void* (*FT_Alloc_Func)( FT_Memory memory,long size );
  ↓
FT_Alloc_FuncはFT_Memoryとlongを引数に持ち、void*を返す関数のポインタ
  ↓
C言語の文法でメンバー関数を定義したいのでしょう

Q読み込まれた外部ムービーからのコントロールについて

下記のファイルなど(※)を用意します。
(?)の部分にどのような記述をすれば、(?)のボタンアクションによってyomikomu.exeのシーン2フレーム1を表示させられますか。

使用ソフトは、FLASHMXです。よろしくお願いします。


My Documentsフォルダ
 yomikomu.exe
  シーン1
   レイヤー2 フレーム1・15 インスタンス名:yomikomareru
   レイヤー1 フレーム15 フレームアクションgotoAndStop("シーン 1", 10)
   レイヤー1 フレーム6 フレームアクション_root.yomikomareru.gotoAndPlay(6)
   レイヤー1 フレーム1 フレームアクションloadMovie("/gaibu/yomikomareru.swf", "yomikomareru")
  シーン2
   レイヤー3 フレーム1・15
   レイヤー2 フレーム1・15 インスタンス名:yomikomareru
   レイヤー1 フレーム15 フレームアクションgotoAndStop("シーン 2", 12)
   レイヤー1 フレーム11 フレームアクション_root.yomikomareru.gotoAndPlay(11)
   レイヤー1 フレーム1 フレームアクションloadMovie("/gaibu/yomikomareru.swf", "yomikomareru")
 gaibuフォルダ
  yomikomareru.swf
   シーン1
    レイヤー2 フレーム11・15
    レイヤー2 フレーム6・10 ボタンアクション(?)
    レイヤー2 フレーム1・5
    レイヤー1 フレーム15 フレームアクションgotoAndPlay("シーン 1", 11)
    レイヤー1 フレーム10 フレームアクションgotoAndPlay("シーン 1", 6)
    レイヤー1 フレーム5 フレームアクションgotoAndPlay("シーン 1", 1)
    レイヤー1 フレーム1

下記のファイルなど(※)を用意します。
(?)の部分にどのような記述をすれば、(?)のボタンアクションによってyomikomu.exeのシーン2フレーム1を表示させられますか。

使用ソフトは、FLASHMXです。よろしくお願いします。


My Documentsフォルダ
 yomikomu.exe
  シーン1
   レイヤー2 フレーム1・15 インスタンス名:yomikomareru
   レイヤー1 フレーム15 フレームアクションgotoAndStop("シーン 1", 10)
   レイヤー1 フレーム6 フレームアクション_root.yomikomareru.gotoAndPlay(6)
...続きを読む

Aベストアンサー

おはようございます。
同時に存在しているのなら,単純に

--------------------------------
on (release) {
loadMovie("/gaibu/yomikomareru2.swf", "_root.yomikomareru2");
_root.gotoAndPlay("label2");
}
--------------------------------

です。
ごくごく普通で行けるので,そんなに悩むことではありません。
_root.yomikomareru2 に /gaibu/yomikomareru2.swf を読み込めば良いだけです。

Q一年ほど前にやった 韓流グループのt-araのWebドラマ 「甘い誘惑」のオープニングのアップテンポ

一年ほど前にやった
韓流グループのt-araのWebドラマ
「甘い誘惑」のオープニングのアップテンポの曲の名前を知りたいです!
知ってる方教えてください!

Aベストアンサー

t-araの123ではないですか?
「t-ara 123」 で検索してみてください

Q1つのボタンで外部ファイルを順番に読み込む

こんにちはkanako888です。
flashMXを使用しています。

さて写真のアルバムを作っているのですが、写真は外部ファイル(jpg)にしています。
写真の入れ替えは、写真のタイトル横にボタンを作り
1つずつ入れ替えています。

(1) 犬の写真(pho00.jpg)
(2) 猫の写真(pho01.jpg)
(3) 金魚の写真(pho02.jpg)

 (1)~(3)の番号がボタンでスクリプトをそこに入れています。

(1)のボタン
on (release) {
loadMovie("pho00.jpg", pho);
}

(2)のボタン
on (release) {
loadMovie("pho02.jpg", pho);
}

(3)のボタン
on (release) {
loadMovie("pho03.jpg", pho);
}

外部ファイルの名前は
pho00.jpg から順番に
pho01.jpg
pho02.jpg
という風に番号が増えているだけです。

これらを利用して(しなくても)
戻るボタン と
進むボタン というのを作り
どの写真が開かれてあっても、
戻るを押せば1つ前の番号の写真に
進むを押せば1つ次の番号の写真に
という風には出来ませんか?

どうぞ宜しくお願い致します。

こんにちはkanako888です。
flashMXを使用しています。

さて写真のアルバムを作っているのですが、写真は外部ファイル(jpg)にしています。
写真の入れ替えは、写真のタイトル横にボタンを作り
1つずつ入れ替えています。

(1) 犬の写真(pho00.jpg)
(2) 猫の写真(pho01.jpg)
(3) 金魚の写真(pho02.jpg)

 (1)~(3)の番号がボタンでスクリプトをそこに入れています。

(1)のボタン
on (release) {
loadMovie("pho00.jpg", pho);
}

(2)のボタン
on (release) {
loadMovie("pho02.jpg", pho...続きを読む

Aベストアンサー

#1です。
若干勘違いしていましたね。すみません。
「戻る」 や 「進む」 ボタンというのは,
前の表示に戻る (ブラウザの戻るボタンのようなもの) ではなくて,
例えば,
「pho02.jpg」が表示されていたら,
「戻る」 ボタンで 「pho01.jpg」 に戻る,
「進む」 ボタンで 「pho03.jpg」 に進む,
という意味だったのですね。

それだと凄く簡単です。
#1 で回答したように,いちいち前の段階を記録するという必要はなくなります。
変数 i をプラスマイナスして,その番号の付いた JPEG をロードすれば良いだけです。


> 都合がよくなると分かる日がいつになるか
> 分かりませんが、これからは0を取ってみます。

その日はおそらく今日ではないかと思います。
このつたなくて申し訳ない回答が理解出来れば今日です。


外部JPEGを
「pho0.jpg」,「pho1.jpg」,「pho2.jpg」,…,「pho10.jpg」,…「phoN.jpg」
という名前にしておきます。
JPEGが 11 枚以上(pho10.jpg以上) 存在するのであれば,
こうしておかないと,データベースを別に用意したり,不要な分岐が必要になるため,大変やっかいです。


まずフレーム1のスクリプト

---------------------
// 変数 i に 0 という初期値を設定(可変)
var i = 0;
// JPEG の最終番号を設定(可変)
var N = 12;
// pho?.jpg を pho にロード(不要かも…)
loadMovie ("pho"+_root.i+".jpg", pho);
---------------------

上の例は,「pho0.jpg」~「pho12.jpg」 まで,13枚のJPEGがあった場合です。
とりあえず最初に何かを読み込むパターンにしています。



読み込むボタンのスクリプト

--- pho0.jpg の場合 ---------------------
on (release) {
_root.i = 0;
loadMovie ("pho"+_root.i+".jpg", pho);
}
---------------------------------------

--- pho1.jpg の場合 ---------------------
on (release) {
_root.i = 1;
loadMovie ("pho"+_root.i+".jpg", pho);
}
---------------------------------------

読み込むボタンのスクリプトは,以下 _root.i = 1; の 1 などの部分が変わるだけです。



「戻るボタン」 のスクリプト
---------------------------------------
on (release) {
// もし i が 0 でなければ i を i-1 にする
if (_root.i != 0) {
_root.i--;
}
loadMovie ("pho"+_root.i+".jpg", pho);
}
---------------------------------------

「進むボタン」 のスクリプト
---------------------------------------
on (release) {
// もし i が N でなければ i を i+1 にする
if (_root.i != _root.N) {
_root.i++;
}
loadMovie ("pho"+_root.i+".jpg", pho);
}
---------------------------------------

結局,_root の i をプラスマイナスして,
その数字が付いた JPEG をロードするだけです。
if文を使っているのは,
写真がないのに戻ったり進んだりするのがマズイからだけです。
これは単なるエラー処理ですから本題とは関係がありません。
写真がなくて,何も表示されなくなるのでもOKでしたら,
例えば「戻る」ボタンは,

---------------------------------------
on (release) {
_root.i--;
loadMovie("pho"+ _root.i + ".jpg", pho);
}
---------------------------------------

となります。
原理はそれだけです。
だいたい以上です。



= = = 連番ネーミングの話 = = = = = = = = = 

上記の場合,もし,

「pho00.jpg」,「pho01.jpg」,…,「pho10.jpg」,…

のような名前でしたら, i のプラスマイナスだけではうまく行かなくなります。

 もし,i が 10 以上であれば,
 → loadMovie("pho"+ _root.i + ".jpg", pho);
 もし,i が 9 以下であれば
 → loadMovie("pho0"+ _root.i + ".jpg", pho);

このような場合分けスクリプトにしないとなりません。
これは CPU にとっても,メモリにとっても,ファイル容量(転送速度)にとっても,
また書く人間の労力をとっても,無駄です。
もっと桁数が増えるとそれどころの分岐ではなくなります。

さらに,変則的な名前だと,

p1 = "inu.jpg";
p2 = "neko.jpg";
p3 = "kingyo.jpg";
…   …

もしくは

p = new Array("inu.jpg","neko.jpg","kingyo.jpg",…);

のようにデータベースが必要になります。
そして i をプラスマイナスして,
_root["p" + i] もしくは p[i] などの値をロードするというようなもっとややこしい物になります。
それだと最初から,

「pho0.jpg」,「pho1.jpg」,「pho2.jpg」,…,「pho10.jpg」,…「phoN.jpg」

にしておけば,全て楽です。

「pho0.jpg」,「pho1.jpg」,「pho2.jpg」,… にする方が良いというのはそういうことです。
他にもまだたくさん利用することはありますが,楽になる一例です。
「pho0.jpg」,… だと簡単に機械的に自動で処理できます。
実際は外部のものと言うより,
内部の "同種" で"複数" のオブジェクトのネーミングをそういう連番形式にするのですが,
外部データにも同じ事が言えるということです。

例えば,
上の「pho0.jpg」,「pho1.jpg」,「pho2.jpg」,… を読み込むボタンが,
内部の "同種" で"複数" のオブジェクトです。
仮に,
「pho0.jpg」 を読み込むボタンのインスタンス名を 「btn0」
「pho1.jpg」 を読み込むボタンのインスタンス名を 「btn1」
「pho2.jpg」 を読み込むボタンのインスタンス名を 「btn2」
 …       …      …
「pho12.jpg」 を読み込むボタンのインスタンス名を 「btn12」
としておいて,

例えばフレームのスクリプトに,

----------------------
for (var k = 0; k<=12; k++) {
_root["btn"+k]._visible = false;
}
----------------------

と書くとすると,
「btn0」~「btn12」 のボタンは一斉に消えます。
1ボタン1ボタンに対して,

_root.btn0._visible = false;
_root.btn0._visible = false;
_root.btn0._visible = false;
 …      …
_root.btn12._visible = false;

なんて言うことは書かなくて良いのです。
ボタンが100個以上になっても,

for (var k = 0; k<=12; k++)

の k<=12;  の部分を変えるだけで
一気に 100 個でも 1000 個でもボタンを消せます。


※ 動作・作成環境
  #1,#2のスクリプトともに
  作成可能環境: Flash 5 以上
  スクリプト動作環境: Flash Player 5 以上

#1です。
若干勘違いしていましたね。すみません。
「戻る」 や 「進む」 ボタンというのは,
前の表示に戻る (ブラウザの戻るボタンのようなもの) ではなくて,
例えば,
「pho02.jpg」が表示されていたら,
「戻る」 ボタンで 「pho01.jpg」 に戻る,
「進む」 ボタンで 「pho03.jpg」 に進む,
という意味だったのですね。

それだと凄く簡単です。
#1 で回答したように,いちいち前の段階を記録するという必要はなくなります。
変数 i をプラスマイナスして,その番号の付いた JPEG をロー...続きを読む

Qアメリカで身長184cmって大きい方ですか?あと、184cmってft.で言えばどのくらいですか?6,

アメリカで身長184cmって大きい方ですか?あと、184cmってft.で言えばどのくらいですか?6,1ft.ですか?それとも6ft.ですか?あと、日本で184cmって目立ちますか?

Aベストアンサー

アメリカに住んでいた肌感覚からいうと、スポーツ選手なら184cmはザラにいますが、一般人でしたら180超えるとやっぱり大きいなあと思いましたね。
身長を例えば運転免許の申請などで書き込む時は、フィートとインチ両方で書き込みます(自分の昔の運転免許証で確認しました)。例えば5フィート2インチならば5'2''となります。
正確にいうと、184cm=6.03675ft=6ft+0.03675ft=6ft+0.441inです。
なので四捨五入で、フィートだけならば6ftでOKです。
日本で184cmは目立ちますよ。女性は言うにおよばず、男性でも頭ひとつ抜けますから、大きいなあって思う人が多いでしょうね。

Q外部ムービーを読み込んだとき音が鳴らなくて困っています.

外部のムービーにサウンドオブジェクトを作ってattachしてstartするスクリプトを書いているのですが,そのswfファイルを他のswfファイルからloadMovieしたときに読み込まれたswfファイルの音が出ないのです.助けてください;;


読み込まれるswfのスクリプトをのせておきます.
s1_sound = new Sound();
s1_sound.attachSound("midi1.aif");
s1_sound.start(0,999);

Aベストアンサー

結論から書きますと、

 s1_sound = new Sound();

の部分を

 s1_sound = new Sound( this );

と書き換えてみてください。これで直ると思います。


Sound オブジェクトを作る new Sound は、正式には Sound オブジェクトで制御するムービークリップを指定することになっています。
省略すると _root の音を制御する Sound オブジェクトが作られ、ムービー全体の音を制御するオブジェクトになります。

仮に、ムービー Main.swf と Sub.swf があり、Main.swf にあるムービークリップ clip に Sub.swf が読み込まれるとします。
Sub.swf にある Sound オブジェクトが _root の音を制御するオブジェクトの場合は、Main.swf に読み込まれた時点で _root は Main.swf のタイムラインを指すようになるため、Main.swf のライブラリを参照して attachSound が実行されます。
つまり、Main.swf に” midi1.aif ”というリンケージ識別子を持つサウンドシンボルがあればこのシンボルのインスタンスが挿入されて演奏が始まりますが、該当するシンボルが見当たらないと attachSound が失敗してしまい、音は鳴りません。

Sub.swf のタイムラインでの this は、Sub.swf 単体で再生した時は Sub.swf の、Main.swf にあるムービークリップ clip に読み込まれた時は clip のタイムラインを指します。
clipに 読み込まれても、Sub.swf が持っているライブラリは Main.swf とは別のものとして開かれていて、Sub.swf では引き続き自分のライブラリを使用してムービーを再生しています。
よって、clip に読み込まれた時に、_root ではなくこのムービークリップ内の音を制御する Sound オブジェクトにしておくことで、clip に読み込まれたムービーのライブラリ、要するに Sub.swf が持っているライブラリからサウンドシンボルを挿入できる仕組みになります。

結論から書きますと、

 s1_sound = new Sound();

の部分を

 s1_sound = new Sound( this );

と書き換えてみてください。これで直ると思います。


Sound オブジェクトを作る new Sound は、正式には Sound オブジェクトで制御するムービークリップを指定することになっています。
省略すると _root の音を制御する Sound オブジェクトが作られ、ムービー全体の音を制御するオブジェクトになります。

仮に、ムービー Main.swf と Sub.swf があり、Main.swf にあるムービークリップ clip に Su...続きを読む


人気Q&Aランキング