• ベストアンサー

ボタン自身の画像を変える方法

SUZUKAでFlashを勉強してます。 SWF4でgreen.pdrとred.pdrのボタンを用意して、ボタンアクションを追加し、ボタンのプロパティで通常時をgreen.pdr 押下時をred.pdrにしてプレヴューで一瞬red.pdrに変わるまでは解ります。 red.pdr一瞬ではなく、red.pdrのままにして置きたいのですが、そのあとのスクリプトがわかりません。(SWF4に制限がある事は知ってます。)出来れば、別のボタンでgreen.pdrに戻す方法も教えて頂ければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

~概略~ あるスプライト 内の フレーム1 とフレーム2に、それぞれ 「green.pdr のボタン」 と 「red.pdr のボタン」 を配置し、 そのスプライト内のフレームを 1⇔2 と切り替えれば良いと思います。 ~詳細~ 「ファイル」→「プロジェクトのプロパティ」の[SWFバージョン]で、 [SWF4] にチェックが入っているものとします。 また、 「green.pdr」 と 「red.pdr」 はすでに作成してあって、 シンボルリスト内に追加(登録)してあるものとします。 シンボルリストのアイテム欄を右クリックし、 「アイテムを追加」→「ボタン追加」でボタンを追加します。 このとき、 [通常時(必須)] の項目には 「green.pdr」 のみを指定します。 再び、シンボルリストのアイテム欄を右クリックし、 「アイテムを追加」→「ボタン追加」でボタンを追加します。 このとき、 [通常時(必須)] の項目には 「red.pdr」 のみを指定します。 また、シンボルリストのアイテム欄を右クリックし、 「アイテムを追加」→「スプライト追加」でスプライトを追加します。 このとき、 [サイズ] の [幅」 と [高さ] は、 「green.pdr」 や 「red.pdr」 のサイズと合わせておくほうが扱い易いと思います。 (基本的にはサイズは任意です。デフォルト指定されるキャンバスのサイズでもかまわないとは思います。) そのシンボルリスト内に新規で作成したスプライトを選択して その上の欄の 「編集」 ボタンをクリックし、スプライト内タイムラインの編集に入ります。 シンボルリストで、「green.pdrを指定したボタン」を選択し、 「右クリック」→「レイヤーに追加」でスプライト内のフレーム1に「green.pdrを指定したボタン」を配置します。 その 「green.pdrを指定したボタン」 のレイヤーの フレーム2 を選択し、 シンボルリストで、今度は 「red.pdrを指定したボタン」を選択し、 「右クリック」→「レイヤーに追加」でスプライト内のフレーム2に「red.pdrを指定したボタン」を配置します。 ここまでの状態で、 スプライト内のタイムラインの フレーム1 には 「green.pdrを指定したボタン」だけ があって、 スプライト内のタイムラインの フレーム2 には 「red.pdrを指定したボタン」だけ があるはずです。 上側のレイヤー(「red.pdrを指定したボタン」のレイヤー)のフレーム1を選択し(つまり何もないフレームを選択し)、 そのレイヤー名の部分を「右クリック」→「アクションレイヤーの挿入」で、 [フレームアクション]レイヤーの キーフレームである フレーム1 を作成します。 その[フレームアクション]レイヤーの フレーム1 を選択し、 Suzukaソフトの画面の右下にある 「スクリプトを編集」 ボタンをクリックし、 [スクリプトエディタ] を表示させ、そこに stop(); と書きます。 これでスプライトは勝手にループ再生しなくなります。 次に フレーム1 の 「green.pdrを指定したボタン」 を選択し、 画面の右下にある 「スクリプトを編集」 ボタンをクリックし、 [スクリプトエディタ] を表示させ、そこに on(press){ gotoFrame(1); } と書きます。 これで、この 「green.pdrを指定したボタン」 を押したとき、 このスプライト内のフレームが フレーム2 に行って停止します。 この gotoFrame は少し変わっていて、 gotoFrame(0); だと フレーム1 に gotoFrame(1); だと フレーム2 に gotoFrame(2); だと フレーム3 に  …          … gotoFrame(n); だと フレーム(n+1) に進んで停止します。 ですから、 逆に行きたいフレームを n とするなら、 gotoFrame(n-1); を書けば良いということになります。  gotoAndStop(n) = gotoFrame(n-1) という関係です。 以上でスプライト内のタイムラインの編集は終わりですから、 画面左上のスプライト名の部分([スプライト1(ID:○)] のようになっているピンク色の部分)をダブルクリックし、 メインのタイムラインの編集に戻ります。 メインのタイムラインの編集に戻りましたら、 シンボルリストで今作成したスプライトを選択し、 「レイヤーに追加」でメインのタイムラインに追加します。 この辺で一度、 「ウィンドウ」→「プレビュー」などでボタンの動作確認をしていた方が良いです。 上に書いた内容がちゃんとできていましたら、 プレビューしたとき、 キャンバス上のスプライトには 「green.pdr」 の絵が表示されたままになっていて、 スプライトを押さえると 「red.pdr」 の絵に変わるはずです。 --- --- --- さて次に、別のボタンで「green.pdr」に戻す方法 です。 スプライトを別の外部のボタンなどから操作するには、 スプライトのインスタンス名が必要です。 上で配置したスプライトのあるレイヤーの、レイヤー名の部分をダブルクリックして、 [レイヤーのプロパティ]パネルを表示させ、 2つ目の項目 [インスタンス名] の欄でインスタンス名を付けます。 インスタンス名はアルファベットから始まる半角の文字を使えばたいてい何でも良いです。 ここでは、 green red sprite (緑赤スプライト)の略のような意味で、 「GRsprite」 というインスタンス名にでもしておきましょうか。 「別のボタン」は適当に(任意で)作成し、 同じくメインのタイムラインのレイヤーに追加し、 キャンバス上に見えるように配置します。 そのキャンバス上の「別のボタン」を選択し、 画面の右下にある 「スクリプトを編集」 ボタンをクリックし、 [スクリプトエディタ] を表示させ、そこに on(press){ tellTarget("/GRsprite"){ gotoFrame(0); }; } と書きます。 tellTarget("/GRsprite") は、 「_root にある GRsprite に命令」という意味です。 「/」が先頭に付くとそれは _root(メインのタイムライン)を指します。 したがって、 「/GRsprite」 は _root(メインのタイムライン) にある 「GRsprite」 という根のインスタンスということになります。 その他のターゲットパス表記もHTMLのファイルパスの表記とほぼ同じです。 以上で、  スプライト「GRsprite」 をプレスしたとき、  そのスプライトの絵が 「red.pdr」 に変わり、  「別のボタン」をクリックしたとき、  スプライト「GRsprite」 の絵が 「green.pdr」 に変わる。 というものができます。 ホント、SWF4 は大変ですね......。 Adobe の FlashLite1.0 や 1.0 でも普通音をあげて泣きを見るのが落ちですが, Suzuka や ParaFla の SWF4 はもっと大変です(参考資料などもほとんどありませんし)。

MROST
質問者

お礼

懇切丁寧な、ご指導ありがとうございました。 勉強してる、SUSUKAそのままなので解り易いです。 これから、自分で実行してみますが、まずは、お礼まで・・・・。

MROST
質問者

補足

質問の補足ではありません。 一度、お礼してたので、お礼の欄が使用できず、ここで再度の、お礼をいたします。 自分でも出来ました。(あたりまえですね) 疑問が一つ解決して、勉強が先に進めます。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

SUZUKAと言うソフトを触ったことが無いので 違っていたらすみません。 SUZUKAはactionscript1.0に対応との事、 スクリプトで制御すればできると思います。 1.まずムービークリップを作成、  ここでは仮にインスタンス名testとします。 2.上記testの中にgreen.pdrをmcとして配置、  インスタンス名greenとします。 3.redをステージに配置せずライブラリに保存。(識別子はred) 4.test内にactionscriptレイヤーを生成以下を記述 green.onRollOver = function(){ green.removeMovieClip(); this.attachMovie("red", "red", 0) red._x = ここにgreenと同じ座標; red._y = ここにgreenと同じ座標; } とりあえずこれでロールアウトしても画像はそのままです。 んで戻すボタンは同様に 作ったボタンに対して green.onPress = function(){ green.removeMovieClip(); this.attachMovie("green", "green", 0) green._x = ここにredと同じ座標; green._y = ここにredと同じ座標; }

MROST
質問者

補足

早速の回答ありがとうございました。 本家FlashとSUZUKAの違いか、私の理解不足か解りませんが 2.上記testの中にgreen.pdrをmcとして配置、  インスタンス名greenとします。 インスタンス名が記入欄に記入できませんでした。 回答を参考に、自分でも勉強してみます。

すると、全ての回答が全文表示されます。

関連するQ&A