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

CS4、ASは3.0を使用しています。
ASについてはまったくの初心者です。
お店のFLASHを作成しています。構成は

ちょっとしたオープニングムービー

ボタンが4つ出てくる

その各ボタンを押すと指定したフレームに飛ばす

というものです。飛ばし先でもそこから再生するためplayになります。
各ボタンにはインスタンス名を付けています。
本のサンプルやネットで調べても、まったく同じ状態のスクリプトがわからなかった為、似たようなヤツをアレンジしてかなり色々と試したのですが、全て上手くいきません。
一番近かったのが下記のようになります。
ボタンのインスタンスはmenuです。

this.menu.addEventListener(MouseEvent.CLICK,goNext);
function goNext(e:MouseEvent):void {
this.nextFrame();
}

これをアレンジして(69のフレームに飛ばす)

this.menu.addEventListener(MouseEvent.CLICK,goNext);

function goNext(e:MouseEvent):void {
this.gotoAndPlay(69)();
}

としたのですが、エラーが出てダメでした。
その他諸々、色々なスクリプトを試しましたが、
殆どが
「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
at _fla::MainTimeline/frame1()」
とエラーがでます。

スクリプトがダメなのか、それともスクリプトを配置する場所がダメなのすらも分かりません。

1.指定のフレームに移動するスクリプトを教えて下さい。
2.スクリプトを配置する場所は1~4のウチでどうれでしょうか?
(どの場所に配置してもエラーがでます。又、タイムライン上にすでに配置されているスクリプトは○秒ストップというスクリプトです)

丸一日これに費やしたのですが、まったく出来ず困ってます。
よろしくお願い致します。

「複数ボタンで指定のフレームに移動」の質問画像

A 回答 (2件)

#1です。



> 添付写真1~4の部分どこに記述してもエラーになってしまいます。

1~4の中では 2 または 3 に書く必要があります。
少なくとも「menu」というインスタンス名を付けたインスタンス(ボタン)がその時点で存在しないと,何も命令や設定はできませんから。



> この場合どんな原因が考えられるのでしょうか?

私は,
「インスタンスを作成(配置)する」→「インスタンス名を付ける」→「場合によってはそのインスタンスにモーショントゥイーンなどを付ける」
という普通にやる手順通りにいつも作成してますので今まで気付きませんでしたが,
CS4 の モーショントゥイーン (新モーショントゥイーン) は少々特別なようです。

モーショントゥイーン後のインスタンスにスクリプトで何かを指定したり命令する場合,
モーショントゥイーン開始時からそのインスタンスにインスタンス名をつけておかなければならないようです。
ですから,
上に書いた「インスタンスを作成(配置)…モーショントゥイーンなどを付ける」 という手順通り作成していれば何も問題は起こらないのですが,
モーショントゥイーンを作成した後にインスタンス名を付けるという普通ではない手順を取った場合,
必ず 「モーショントゥイーン開始時のインスタンスにインスタンス名を付ける」 ということに気を付けなければならないようです。
※ 小さいですが図参照のこと↓。
「複数ボタンで指定のフレームに移動」の回答画像2
    • good
    • 0
この回答へのお礼

わざわざ画像までありがとうございます。
色々実験してみて、ボタンとASを1フレーム目に持って行ったら無事できました。
しかし、2フレーム以降にボタンとASを持って行くとエラーが出てダメです。
インスタンスがその時点にあるにもかかわらず、1フレーム目でないと上手く動きません。不思議です。
ボタンのーショントゥイーンも削除してみて実験してみましたが、結果同じです。

構成では最初はボタンは表示されないようにしたいので、1フレーム目に透明にしたボタンとASを配置して、途中からボタンが出てきた感じに仕上げる事ができました。

ただ、問題はプログレスバーです。
これから設置するのですが、ボタンもASも1フレーム以外受け付けないとなると、又、頭を抱えてしまいます。

お礼日時:2010/03/14 14:20

???


最重要ポイントを押さえていませんよ。

> this.menu.addEventListener(MouseEvent.CLICK,goNext);
> function goNext(e:MouseEvent):void {
>  this.nextFrame();
> }
>
> これをアレンジして(69のフレームに飛ばす

この質問のしかたを見る限り,
「アレンジする前は無事動作するのにアレンジした後にエラーが出る。」
という意味になります。

つまり,
アレンジする前ではOKなのか,
それともアレンジ前にすでにその時点でエラーがでているのか,
その最重要ポイントが抜けています。



「アレンジする前は無事動作するのにアレンジした後にエラーが出る。」
というのでしたら一目瞭然,
this.gotoAndPlay(69)();
が間違っています。
this.gotoAndPlay(69);
です。

「○○()」 は 「○○を実行する」 という意味になります。
もしその実行するときに引数を渡す場合は,()内に引数を入れます。
「○○(引数)」 →「引数を渡して○○を実行」
「gotoAndPlay(69)」→「引数69を渡してgotoAndPlayを実行」

この回答への補足

すみません、補足します。

アレンジする前のオリジナルのスクリプト(本に載っていた)のですら、
「TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。」
とエラーが出てきます。
添付写真1~4の部分どこに記述してもエラーになってしまいます。

この場合どんな原因が考えられるのでしょうか?
これさえクリアできたら、後はthis.gotoAndPlay(69);に差し替えて、実行可能って事ですよね?
以上よろしくお願い致します。

補足日時:2010/03/14 08:37
    • good
    • 0

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