トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     複数読み込んだ画像の表示切替について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
cancan
Åê¹ÆNo.48234
投稿日時: 2011-10-22 18:03
新米
居住地: 埼玉
投稿: 21
使用環境:
AS2.0:WindowsXP、Flash8
AS3.0:Win7、CS5.5
複数読み込んだ画像の表示切替について
こんにちは。
いつも参考にさせていただいております。
表題の件で質問です。
as3.0で、画像(xxx.swf)を複数読み込み、ユーザのクリックに合わせて表示する画像を切り替えるものを作成中です。

ステージにimg_mcを配置、その中に3つの画像を読み込むことはできました。
(現状3つの画像が重なって表示されている状態です)

読み込み後は、1枚目の画像を表示、それ以外は非表示、としておきたいのですが、画像をハンドリングするすべが分かりません。
(img_mc.xxxxx.visible=false のように指定したい)
名前をどのタイミングで、どこに書いたらよいでしょうか。
よろしくお願いいたします。


//1フレーム目
//読み込みカウンタ
var nDataLoaded = 0;

//画像ファイル名
var uData_array = new Array(3);
uData_array[0] = "banana.swf";
uData_array[1] = "apple.swf";
uData_array[2] = "orange.swf";


//2フレーム目--------------------------------------
stop();
//
// ローダーオブジェクトを作成し配置
var img_req : URLRequest = new URLRequest(uData_array[nDataLoaded]);
var loader_obj : Loader = new Loader();
img_mc.addChild(loader_obj);
loader_obj.load(img_req);

var info_li:LoaderInfo = loader_obj.contentLoaderInfo;

info_li.addEventListener(Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc(evt : Event) {
	
	//次のフレームへ
	nextFrame();
}


//3フレーム目--------------------------------------
//ロード済数カウント
nDataLoaded++;

//
//すべてダウンロードしたら、
if (nDataLoaded >= uData_array.length) {
	play();
} else {
	//前のフレームに戻る
	this.prevFrame();
}


//4フレーム目--------------------------------------
stop();
//
trace("img_mcの中身");
for each (var i in img_mc) {
	trace(img_mc[i].name);
}



----------------
cancan@さいたま

ひろゆき
Åê¹ÆNo.48235
投稿日時: 2011-10-22 18:40
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 複数読み込んだ画像の表示切替について
そもそも、複数フレームで制御する必要があるのでしょうか?
ないのであれば、フレーム移動をさせることは問題を複雑にする原因になりかねない気がします。
というか、AS2.0の流儀にとらわれすぎているのではないでしょうか?
AS2.0を捨てるつもりでやらないと、AS3.0では混乱を招く気がします。

また、画像ファイルではなく、SWFファイルの読み込みにしているのには、
何か理由があるのでしょうか?
また、SWFファイルを「画像」と表現するのには違和感があります。
誤解を避けるためにも、漠然とした「画像」という表現ではなく、
画像ファイルなのかSWFファイルなのか、明示された方がよいでしょう。


いずれにせよ、外部SWFファイルを複数管理したいのであれば、
配列に格納して、扱えばよろしいのでは?

それができないのであれば、何をどうつまずいているのか、
具体的に明らかにすべきでしょう。


それ以前に、Loaderクラスを理解された方がよいように思います。
AS2.0のMovieClipLoaderやMovie.loadMovie()などとは全く異なるものですから、
基礎から学習されることをお勧めします。
まだ複数の画像読み込みをされる段階ではないようにお見受けします。

[AS3.0] Loaderクラスを基礎から学ぶ! (1)
[AS3.0] Loaderクラスを基礎から学ぶ! (1)
[AS3.0] Loaderクラスを基礎から学ぶ! (2)
[AS3.0] Loaderクラスを基礎から学ぶ! (3)
[AS3.0] Loaderクラスを基礎から学ぶ! (4)

[AS3.0] 外部画像を読み込む (1)
[AS3.0] 外部画像を読み込む (2)
[AS3.0] 外部画像を読み込む (3)
[AS3.0] 外部画像を読み込む (4)

そうした基礎的なことを学習したうえで、
「複数の外部ファイルを読み込んで単に並べて表示する」ということだけ
やってみる方がよいのでは?

[AS3.0] 複数画像を読み込む (1)


なお、表示切り替えの部分については、外部ファイルを用いずに、
そのしくみを作るところから始めた方がいいでしょう。

[AS3.0] スライドショーに挑戦! (5)
[AS3.0] スライドショーに挑戦! (6)
[AS3.0] スライドショーに挑戦! (7)


一度に複数のことを解決しようとしても、問題を複雑化するだけですし。


----------------
質問する際は、回答者に具体的な情報を与えてください。

野中文雄
Åê¹ÆNo.48236
投稿日時: 2011-10-22 20:12
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 複数読み込んだ画像の表示切替について
まず、インスタンスを名前で扱うことは、ActionScript 3.0ではあまりお勧めしません(「MovieClipインスタンスとインスタンス名」参照)。インスタンスをVectorオブジェクトまたは配列に入れて扱えばよいのではないでしょうか。たとえば、以下のスクリプトを加えます。
// 第1フレームに追加
var nImages:uint = uData_array.length;
var images:Vector.<Loader> = new Vector.<Loader>(nImages);

// 第2フレームに追加
images[nDataLoaded] = loader_obj;

// 第4フレームに追加
xShowImage(0);
function xShowImage(n:uint):void {
	for (var i:uint = 0; i < nImages; i++) {
		images[i].visible = false;
	}
	images[n].visible = true;
}

処理を段階に分けて考えるうえでは、フレームアクションに分けるところから始めてもよいと思います。ただ、ご覧のようにスクリプト全体の見通しは悪くなります。ご希望の動作が得られたら、フレームでなくイベントに分けるようにすると、ひとつのフレームにまとめられるでしょう。
引用:
cancanさんは書きました:
ステージにimg_mcを配置、その中に3つの画像を読み込むことはできました。
(現状3つの画像が重なって表示されている状態です)

読み込み後は、1枚目の画像を表示、それ以外は非表示、としておきたいのですが、画像をハンドリングするすべが分かりません。
(img_mc.xxxxx.visible=false のように指定したい)
名前をどのタイミングで、どこに書いたらよいでしょうか。


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

cancan
Åê¹ÆNo.48248
投稿日時: 2011-10-24 17:06
新米
居住地: 埼玉
投稿: 21
使用環境:
AS2.0:WindowsXP、Flash8
AS3.0:Win7、CS5.5
Re: 複数読み込んだ画像の表示切替について
野中様

ありがとうございました。
教えていただいたスクリプトを調べて追加し動作させてみました。
現在のスクリプトへの追加という形で教えていただけたので理解しやすかったです。助かります。
インスタンス名の扱いがas3.0では少々違うという点も勉強いたしました。
今まで
this["a"+i+"_mc"]
のような形でmc名を指定してスクリプトを書くことも多かったのですが、そうではなく配列などに直接格納して使うようになるのですね。

Loaderというものをどう考えればよいのか(読み込むための仮の入れ物なのか、入れ物本体なのか)分からなかったのですが、入れ物本体と理解しました。
なので、
var loader_obj : Loader = new Loader();
images[nDataLoaded] = loader_obj;
img_mc.addChild(loader_obj);
loader_obj.load(img_req);
よりは、
images[nDataLoaded] = new Loader();
img_mc.addChild(images[nDataLoaded]);
images[nDataLoaded].load(img_req);
の方がよいと思ったのですが、あっていますでしょうか。

プログレスバーや他の装飾の関係でフレーム分けしていましたが、理解が進んだらイベントごとに定義できるようにしたいと思います。


----------------
cancan@さいたま

cancan
Åê¹ÆNo.48249
投稿日時: 2011-10-24 17:31
新米
居住地: 埼玉
投稿: 21
使用環境:
AS2.0:WindowsXP、Flash8
AS3.0:Win7、CS5.5
Re: 複数読み込んだ画像の表示切替について
ひろゆき様

たくさんのサンプルをありがとうございました。
自分のスクリプトをこちらへ投稿するに当たり、できるだけ余計なものをそぎ落としたつもりでしたが、フレームわけについては申し訳ございません。

読み込みが完了するたびに、プログレスバーを進めるロジックがあり、フレームを進めることでその描画更新をしていたためこのような展開で記述しておりました。


>それ以前に、Loaderクラスを理解された方がよいように思います。
>AS2.0のMovieClipLoaderやMovie.loadMovie()などとは全く異なるものですから、
はい、まさに知りたかったのはこの点で、はっきりと明記されている文章を見つけられなかったため、どのように使ったらよいか迷っていました。

画像と表記しましたが、読み込みたいのはお伝えしました通りxxx.swfです。(CS5.5、as3.0環境で作成予定)
内部にスクリプトは記述しない予定のswfのため、つい画像と表現してしまいました。失礼しました。

段階を追って1つの画像を読み込むことはやってみました。
次の段階として複数…と思ったのですが、まだ勉強不足とのご指摘、お恥ずかしいです。
Loaderで読み込んだものをそのまま扱ってよいのか、それともBitmapで受け取るのが良いのか、Spriteで受け取るのが良いのか、いろいろなサンプルを見ているうちに混乱していました。
それぞれに利点が異なると思いますが、教えていただいたサンプルのページてもう少し勉強します。
ありがとうございました。


----------------
cancan@さいたま

野中文雄
Åê¹ÆNo.48250
投稿日時: 2011-10-24 18:33
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 複数読み込んだ画像の表示切替について
ふたつのスクリプトの処理内容は基本的に同じです。その意味では、どちらでも大きな違いはありません。ただ、後者の方がステートメント数は少ないです。しかし、ステートメント数は書く手間の違いで、処理効率とは異なります。

複数回参照するプロパティ(エレメントも含みます)は、型指定した変数(loader_obj)に入れておく方が最適化の観点からは好ましいといえます(Adobeデベロッパーセンター「ActionScript 3.0におけるパフォーマンス向上のヒント」02「型指定した変数を活用する」参照)。
引用:
cancanさんは書きました:
なので、
var loader_obj : Loader = new Loader();
images[nDataLoaded] = loader_obj;
img_mc.addChild(loader_obj);
loader_obj.load(img_req);

よりは、
images[nDataLoaded] = new Loader();
img_mc.addChild(images[nDataLoaded]);
images[nDataLoaded].load(img_req);

の方がよいと思ったのですが、あっていますでしょうか。


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

cancan
Åê¹ÆNo.48257
投稿日時: 2011-10-25 21:34
新米
居住地: 埼玉
投稿: 21
使用環境:
AS2.0:WindowsXP、Flash8
AS3.0:Win7、CS5.5
Re: 複数読み込んだ画像の表示切替について
野中様

ご回答ありがとうございました。
1行、2行の目先の違いにこだっていたようです。
リンク先の資料も拝見しました。

自分のスクリプトですが、前者の記述で進めるようにすることにいたしました。
ありがとうございました。


----------------
cancan@さいたま

ひろゆき
Åê¹ÆNo.48260
投稿日時: 2011-10-26 12:08
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 複数読み込んだ画像の表示切替について
そういえば、外部画像読み込みスライドショー的なものを作ったのを思い出しました。
サンプルを挙げておきます。

[AS3.0] TransitLoaderクラスだ! (1)


----------------
質問する際は、回答者に具体的な情報を与えてください。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops