アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして、こんにちは。
Flash初心者です。

[使用環境]
Flash MX 2004
Win 2000

[質問]
1フレーム目にはslide1.○○○、2フレーム目にはslide2.○○○、
3フレーム目にはslide3.○○○といったふうに画像をnextボタンと
backボタンを使って切り替わるようなものを作っています。
 ※○○○にはjpg又はswfが入ります。

+――――――――――――――――――+
| +―――――――+  +――――+ |
| |           |  |back   | |
| |           |  +――――+ |
| | picture     |            |
| |           |  +――――+ |
| |           |  |next    | |
| +―――――――+  +――――+ |
+――――――――――――――――――+

・外部画像を読み込んで表示するには「 picture.loadMovie("slide1.jpg"); 」又は、
 「 picture.loadMovie("slide1.swf"); 」で表示できます。

・slide1はjpgかswfのどちらかのファイルしかなく、shile2、slide3も同様です。

・1フレーム目がswfの場合「 picture.loadMovie("slide1.swf"); 」、
 2フレーム目がjpgの場合「 picture.loadMovie("slide2.jpg"); 」
 というように拡張子を指定してスクリプトを書くのではなく、
 条件式を使って画像を表示するにはどうすればよいのでしょうか。

・もしくは、エラーを無視して次の行へいくというプログラムはあるのでしょうか。


どなたか分かるようでございましたらご教示下さい。お願いします。

A 回答 (2件)

MovieClip.loadMovieメソッドを使うのではなく,


MovieClipLoader()クラスのメソッドを使えばできます。


1フレーム目のスクリプト例
----------------------------------------------------
// ファイルネームの登録(※可変)
my_file = "slide1";

// MovieClipLoaderインスタンスの生成
var my_mcl:MovieClipLoader = new MovieClipLoader();

// リスナーオブジェクト生成
var oListener:Object = new Object();

// ロード失敗時の処理
oListener.onLoadError = function(target_mc:MovieClip, error_str:String, nHttpStatus:Number) {
// 外部SWFファイル"slide1.jpg"をインスタンスpictureにロード
my_mcl.loadClip(my_file+".jpg", picture);
};

// イベントリスナーの登録
my_mcl.addListener(oListener);

// 外部SWFファイル"slide1.swf"をインスタンスpictureにロード
my_mcl.loadClip(my_file+".swf", picture);
----------------------------------------------------


Flash MX 2004(Flash Player 7)以上 です。
取り急ぎ失礼します。

SWF、JPEGファイルを読み込みたい(FlashMX2004以降)
http://hakuhin.hp.infoseek.co.jp/main/as/import. …

MovieClipLoaderクラスについて
http://www.fumiononaka.com/TechNotes/Flash/FN050 …
    • good
    • 0

#1です。



朝回答しないと,夜まで回答できないので,
#1では出勤寸前にドタバタで回答しました。
それで,

スクリプト書いた→SWFとJPEG作った→動かした→動いた→回答した

という作業を10分くらいで済ませました。

間違った回答をしたわけではありませんが,
妙なゴミが入っていたり,
SWF も JPEG も両方ともなかった場合の処理が抜けていたり,
フレーム2 以降のことを考えて作ったものではありませんので,
もう少しちゃんとした形のスクリプトを回答し直します。



基本的に#1と骨子は全く同じです。
ゴミを取ったのと使い勝手を考えたものです。

1フレーム目のスクリプト例 (コピペ可能)
--------------------------------------
// とりあえずストップ
this.stop();

// MovieClipLoaderインスタンスの生成
var my_mcl:MovieClipLoader = new MovieClipLoader();

// リスナーオブジェクト生成
var oListener:Object = new Object();

// イベントリスナーの登録
my_mcl.addListener(oListener);

// ファイルをロードするユーザー定義関数の定義
function loadFile(my_file:String) {

// ロード失敗時の処理
oListener.onLoadError = function() {
if (flag == "s") {
// 外部JPGファイルをインスタンスpictureにロード
my_mcl.loadClip(my_file+".jpg", picture);
// flag を j に
flag = "j";
// ※エラー処理が不要であればこの↓ else 文をカット
} else if (flag == "j") {
// インスタンス名my_textのダイナミックテキストにエラー表示
my_text.text = "SWFもJPEGもありません。";
}
};

// 変数 flag の値を "s" にする
var flag:String = "s";
// 外部SWFファイル"slide1.swf"をインスタンスpictureにロード
my_mcl.loadClip(my_file+".swf", picture);
// インスタンス名my_textのダイナミックテキストを初期化
my_text.text = "";

}

// ファイルをロードするユーザー定義関数の実行
loadFile("slide1");
--------------------------------------


2フレーム目のスクリプト例
--------------------------------------
// ファイルをロードするユーザー定義関数の実行
loadFile("slide2");
--------------------------------------


以降3フレーム目なら,
loadFile("slide3");
などのように,".swf" や ".jpg" を取ったファイル名を引数にして,
フレーム1 の ユーザー定義関数 loadFile(); を実行させる形のものです。
なお,nextボタン と backボタンは
書く必要はないと思いますが次のような感じでしょうね。


nextボタンのスクリプト例
--------------------------------------
on (release) {
this.nextFrame();
}
--------------------------------------


backボタンのスクリプト例
--------------------------------------
on (release) {
this.prevFrame();
}
--------------------------------------

※作成環境: Flash MX 2004以上
 パブリッシュ設定: ActionScript 2.0
 動作環境: Flash Player7以上  です。



#1のままだと,
SWF も JPEG もなかった場合,
Flashが,存在しない JPEG のロードを試み続けるので,よろしくない形です。
ですから変数 flag を立てて,両方なかった場合は,
「my_text」というインスタンス名のダイナミックテキストにエラー表示をするしくみのものに変えました。
ですから,「my_text」というインスタンス名のエラー表示用のダイナミックテキストを,
ムービークリップ picture より上のレイヤーに作ってくだされば,指定した文字列がエラー表示されます。

もしエラー表示が不要でしたら,
「my_text」というインスタンス名のダイナミックテキストを用意せずに,

 // ※エラー処理が不要であればこの↓ else 文をカット
 } else if (flag == "j") {
   // インスタンス名my_textのダイナミックテキストにエラー表示
   my_text.text = "SWFもJPEGもありません。";

この4行を削除してください。
するとSWFもJPEGも両方ともなかった場合のエラー処理は行われません。


このエラーについてですが,

> ・もしくは、エラーを無視して次の行へいくという
> プログラムはあるのでしょうか。

と書かれている意味がよくわかりません。
Flash は基本的にエラーが起きても何事もなかったかのようにそのことは無視して次の処理へと進みます。
Flash はいつもポーカーフェイスです。
ですから,
上のスクリプトのように「エラーを出させること」の方に苦労するのです。
loadMovie だと,なかなか簡単にエラーの表情を見せてくれないので
(出そうと思ったら出せますが普通ではありません),
MovieClipLoaderクラスの onLoadError イベントハンドラで,
エラーをわざわざ取り出しているのです。

エラーの表情を見せるときは,
本当にFlash Payer が苦悩したときです。
for 文などが,(半)無限ループに入ったときなどに,
死にかけ寸前で
「このまま処理を続けると,どうのこうの…」
「処理を続行する?しない?」というような困窮のダイアログが出てきます。

loadMovie で SWF や JPEG がないくらいのエラーでは,
ファイルが表示されないだけで,何事もなかったかのように次々に処理を続けます。
それが,Flash がスマートに見える1つの理由であり,逆に難しくて恐い面です。

参考URLは#1と同じですが1つ増えて…。

SWF、JPEGファイルを読み込みたい(FlashMX2004以降)
http://hakuhin.hp.infoseek.co.jp/main/as/import. …

MovieClipLoaderクラスについて
http://www.fumiononaka.com/TechNotes/Flash/FN050 …

関数
http://homepage3.nifty.com/ginga-b/MX/function.h …
    • good
    • 0
この回答へのお礼

sassakun様、早速のご回答ありがとうございます。
お礼が遅くなりましてすいません。

MovieClip.loadMovieメソッドを使うのではなく,
MovieClipLoader()クラスのメソッドを使えばいいのですね。
非常に詳しく分かりやすい回答で理解できました。
ありがとうございました。

お礼日時:2006/09/21 21:19

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