プロが教える店舗&オフィスのセキュリティ対策術

Flash ActionScript 2.0でアドバイスをお願いいたします。

下記のような記述で、外部フォルダ内の画像(連番のファイル名)を読み込み表示させています。画像枚数は変動しますのでこのような形にしました。

そこで問題なのが、リンク先の指定です。
XMLを読み込んでファイル名「1」の画像にはID「1」のURLがクリックしたら開くようにしたいのですが、どのように設定すればいいのかわかりません;
素人なもので、どのように記述すれば良いかご教授いただければ幸いです。
どうぞよろしくお願いいたします。

-----------------------------
var n = 0;
var s = 0;
_forcusrect = false;
load_mc = createEmptyMovieClip("load_mc", -1);
var mcLoader:MovieClipLoader = new MovieClipLoader();
var oListener = new Object();


function searchTotal() {
s++;
$jpg = "img_top/p"+s+".jpg";
mcLoader.loadClip($jpg, load_mc);
load_mc._alpha = 0;
oListener.onLoadError = function() {
total = s;
clearInterval(sID);
n = 0;
autoExchange();
};
mcLoader.addListener(oListener);
}
function p_load(n) {
$jpg = "img_top/p"+n+".jpg";
mcLoader.loadClip($jpg, load_mc);
p_direction(n);
load_mc._x = 0;
load_mc._y = 0;
load_mc._alpha = 0;
_root.onEnterFrame = function() {
load_mc._alpha += (180-load_mc._alpha)/30;
current_num.text = n;
total_num.text = total-1;
}
}
function autoExchange() {
if (n>=total-1) {
n = 1;
p_load(n);
} else {
n++;
p_load(n);
}
}

sID = setInterval(searchTotal, 70);
pID = setInterval(autoExchange, 4000);
myComboBoxListener = new Object();
myComboBoxListener.change = function() {
clearInterval(pID);
if (flag!==1) {
pID = setInterval(autoExchange, myCombo.value*1000);
}
};
myCombo.addEventListener("change", myComboBoxListener);
-----------------------------------------

XML
-----------------------------------------
<?xml version="1.0" encoding="Shift_JIS"?>
<urllist>
  <anchor id="1" url="http://www.yahoo.co.jp" target="_self" />
<anchor id="2" url="http://www.google.co.jp/" target="_self" />
<anchor id="3" url="http://www.goo.ne.jp/" target="_self" />
</urllist>

A 回答 (2件)

◎ファイル構造 例



 任意のフォルダ
   ├○○.swf (○○.fla)
   ├○○.html (○○.swf を貼り付け)
   ├data.xml
   └img_top (フォルダ)
     ├p1.jpg
     ├p2.jpg
     └p3.jpg



◎data.xml の内容 例

<?xml version="1.0" encoding="Shift_JIS"?>
<urllist>
<anchor id="1" url="http://www.yahoo.co.jp" target="_self" />
<anchor id="2" url="http://www.google.co.jp/" target="_self" />
<anchor id="3" url="http://www.goo.ne.jp/" target="_self" />
</urllist>



◎○○.swf (○○.fla) のスクリプト 例

//外部データを Shift-JIS として扱う設定
System.useCodepage = true;

//XMLインスタンス「my_xml」を作成
var my_xml:XML = new XML();

//「my_xml」内の改行などを無視
my_xml.ignoreWhite = true;

//「my_xml」にデータロード完了時の動作
my_xml.onLoad = function() {
//データのあるノードをmy_nodeとする
var my_node:XMLNode = my_xml.firstChild;
//my_node内のノード数分ループ
for (var i:Number = 0; i < my_node.childNodes.length; i++) {
//ノード数分の空のMC 「load_mc○」 を作成
_root.createEmptyMovieClip("load_mc" + (i + 1), i);
_root["load_mc" + (i + 1)]._x = i * 100;
//MovieClipLoaderインスタンス「my_mcl○」を作成
_root["my_mcl" + (i + 1)] = new MovieClipLoader();
//ロードを監視する用のオブジェクト「my_obj○」を作成
_root["my_obj" + (i + 1)] = new Object();
//外部JPEGロード完了時に実行する関数jpegLoadInitの戻り値を代入
_root["my_obj" + (i + 1)].onLoadInit = jpegLoadInit(i + 1);
//「load_mc○」のリスナーとして「my_obj○」を登録
_root["my_mcl" + (i + 1)].addListener(_root["my_obj" + (i + 1)]);
//外部JPEGのロード
_root["my_mcl" + (i + 1)].loadClip("img_top/p" + (i + 1) + ".jpg", _root["load_mc" + (i + 1)]);
}
};

//「my_xml」に「data.xml」をロード
my_xml.load("data.xml");

//関数 jpegLoadInit の定義
function jpegLoadInit(num:Number):Function {
//戻り値として以下の関数を返す
return function ():Void {
//「load_mc○」クリック時の動作
_root["load_mc" + num].onRelease = function():Void {
//ロードしたXMLからボタンに対応したurlを取り出す
var my_url:String = my_xml.firstChild.childNodes[num - 1].attributes.url;
//ロードしたXMLからボタンに対応したtargetを取り出す
var my_target:String = my_xml.firstChild.childNodes[num - 1].attributes.target;
//url を target ウィンドウで開く
getURL(my_url, my_target);
};
};
}



字数制限を超過するため概略の説明は図示↓
「Flash ActionScript 2」の回答画像1

この回答への補足

ご回答ありがとうございます!
先にXMLの読み込みが必要だったんですね…;

もう少し教えていただきたのですが、
質問にあったスクリプトで任意の枚数の画像をスライドショーのようにしています。
そこでp1.jpgが表示されている間は、id1のリンク先へ飛ぶように、応用したいのですが、どのようにすればよいでしょうか?
教えていただければ幸いですm(__)m

補足日時:2010/09/16 20:09
    • good
    • 0

#1です。



> 先にXMLの読み込みが必要だったんですね…;

ボタンにリンク(getURL)を付ける前でしたらいつでもかまいません。

しかし外部データによって作るムービークリップの数まで決める場合は
ムービークリップを作成する前にXMLロードを "完了" させておく必要があります。

それと字数の都合上
「ムービークリップには外部JPEGをロードした後でなければ
クリック動作( onRelease=function(){} )を定義できない」
という重要ポイントを 少ししか書けませんでした。

ムービークリップ に クリック動作を定義した後に
そのムービークリップに外部JPEGをロードすると(ロードが完了すると)
せっかく定義した クリック動作 が消えてしまいます。

ですから
そのムービークリップに 外部JPEGをロード "完了" した後に
クリック動作 ( onRelease=function(){} ) を定義する必要があります。

この「外部JPEGをロード "完了"」イベントは loadMovie では拾えませんから
MovieClipLoader を使って拾う必要が出てきます。

そのようなことを考え合わせると

 XMLロード開始
 ↓
 XMLロード完了
 ↓
 ムービークリップ作成
 ↓
 外部JPEGロード開始
 ↓
 外部JPEGロード完了
 ↓
 ムービークリップにリンクを付ける

という流れがスムーズにできるということになります。
「先にXMLの読み込みが必要がある」
というよりも
いつもそうとは限らないので
「いつ何をすべきかを考える必要がある」
というべきでしょうか。



> p1.jpgが表示されている間は、
> id1のリンク先へ飛ぶように、
> 応用したいのですが、どのようにすれば

意味(イメージ)が良くわかりませんが。

p1.jpg をロードしたムービークリップが表示されている間は
そのムービークリップの _visible または enabled を true にしておいて
そのムービークリップが表示されていない間は
ムービークリップの _visible または enabled を false にしておけば
_visible や enabled が false になっている間だけ
onRelease=function(){} が動作しないと思います。

または
p1.jpg をロードしたムービークリップの表示開始時に
onRelease=function(){} を定義して
そのムービークリップが非表示になるとき
onRelease=function(){} を delete しても良いかもしれません。

「F-site | イベントハンドラメソッドはdeleteで消せ!」
http://f-site.org/articles/2004/05/22140833.html

とにかく
リンクを付けたいムービークリップに対して

 ムービークリップ.onRelease = function(){
   ロードしたXMLから対応したURLを取り出す
   ロードしたXMLから対応したTargetを取り出す
   getURL(URL,Target);
 };

をするわけです。
あとは上と同じで
場合によって
「いつ何をすべきかを考える必要がある」
ということでしょう。
「Flash ActionScript 2」の回答画像2
    • good
    • 0
この回答へのお礼

丁寧にご説明いただき、ありがとうございます!
無事解決することができました。
本当にありがとうございます。

お礼日時:2010/09/30 09:19

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