人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Flash CS4での制作について質問です。
AS3.0設定でFlashファイル上に二つのリンクボタンを設定しました。(link_btn01/link_btn02)この1つに
function newWin(eventObject:Event):void{
var request:URLRequest=new URLRequest("http://www.villaangelica.to/next/index.html");
navigateToURL(request);
}
link_btn01.addEventListener(MouseEvent.CLICK, newWin);
と記述し、パブリッシュして確認すると問題なくリンクされます。ただ、link_btn02に同様のスクリプトを書き、link_btn01をlink_btn02に書き換えて確認すると、コンパイルエラーになってしまいます。複数のリンク設定は出来ないのでしょうか。

●質問者: dics
●カテゴリ:ウェブ制作
✍キーワード:as3 Click CS4 Flash void
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● tasklight
●30ポイント

どのようなエラーメッセージが表示されるのですか?


同じ名前空間にlink_btn02が重複していませんか?

または、link_btn01を参照している部分があるのではありませんか?

◎質問者からの返答

ありがとうございます。

エラーメッセージは以下の様なものです。

1021:関数の定義が重複しています。 function newWin(eventObject:Event):void{

5000:クラス'fl.core.ComponentShin'は'flash.display_MovieClip'をサブクラスとする必要があります。同じ型のライブラリシンボルにリンクしているためです。

5000:クラス'fl.controls.UIScrollBar'は'flash.display_MovieClip'をサブクラスとする必要があります。同じ型のライブラリシンボルにリンクしているためです。

…というもので、並列に配置してあるテキストエリアのスクロールバーの表示もおかしくなっています。

「同じ名前空間」とありますが、この2つ(link_btn01とlink_btn02)はレイヤは別にしてあります。

よろしくお願いいたします。


2 ● 牛乳先生(tukihatu)
●30ポイント

コードの書く場所などに問題があるようですね。

関数の定義が重複している、というエラーは、function newWinが同じ階層に複数かかれていることを意味します。

root階層
function newWin?
?
}
link_btn01.addEventListener(MouseEvent.CLICK, newWin);

function newWin?
?
}
link_btn02.addEventListener(MouseEvent.CLICK, newWin);

こんなふうに書いてませんか?この場合function newWinは二度書く必要はありません。

root階層
function newWin?
?
}
link_btn01.addEventListener(MouseEvent.CLICK, newWin);
link_btn02.addEventListener(MouseEvent.CLICK, newWin);

>並列に配置してあるテキストエリアのスクロールバーの表示もおかしくなっています。

FLASHではスクリプトエラーがでると他のASもとまってしまいます。現在発生しているエラーが解消すれば動くようになると思います。


複数関数なんて書いてないよ!という場合は、関数をどの階層に書いているかを教えてください。(といってもlink_btn01.addEventListenerとしているのでボタン内に書いているとは思えませんけど)

◎質問者からの返答

ご回答ありがとうございます。

早速試してみましたところ、コンパイルエラーの表示は出なくなりました。

しかしながら、異なるリンク先にしたいと思いますので、その場合はどこへどのようにリンク先を設定すればよろしいでしょうか。(現状では同じリンク先になってしまいます function newWin?以下の記述が共通なので、当然といえばそうなのですが)

ご教示の程、よろしくお願いいたします。


3 ● 牛乳先生(tukihatu)
●30ポイント ベストアンサー

>異なるリンク先にしたい

関数を使いまわしつつ値だけ変数で渡してやればいいのですが、addEventListenerでは変数を基本渡せないのでこんな感じの動きができなかったと思います。

function newWin(data):void{
var request:URLRequest=new URLRequest(data);
navigateToURL(request);
}

link_btn01.addEventListener(MouseEvent.CLICK, newWin("url1"));
link_btn02.addEventListener(MouseEvent.CLICK, newWin("url2"));

こういった形にして変数を渡すのがいいと思います。

//URL設定
var objURL:Object = new Object();
objURL.link_btn01 = "url1";
objURL.link_btn02 = "url2";


function newWin(eventObject:Event):void{
var request:URLRequest=new URLRequest(objURL[event.currentTarget.name]);
navigateToURL(request);
}

link_btn01.addEventListener(MouseEvent.CLICK, newWin);
link_btn02.addEventListener(MouseEvent.CLICK, newWin);

currentTargetは便利なので良く使いますよ!

◎質問者からの返答

ご回答ありがとうございます。

この通りにやってみて、後ほど結果を書き込みます。

ありがとうございました。


4 ● umI
●0ポイント

http://q.hatena.ne.jp

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ