• 締切済み

FLASH liteで選択したグラフィックを変更

Flash liteで 上移動1キー・左移動2キー・右移動3キー・下移動4キー 決定ボタン5ボタン で、方向キーでグラフィックを選択し、決定ボタン5を押すと 選択したグラフィックが変わると言う仕組みを作りたいのですが どのようにすればよいでしょうか? 例:上から2番目、左から2番目を選択し決定ボタンを押した場合。 ●●●●●● ●○●●●● ●●●●●● ●●●●●● ●●●●●● 今現在1フレーム目に ●●●●●● ●●●●●● ●●●●●● ●●●●●● ●●●●●● のグラフィック 2のフレーム目に ○○○○○○ ○○○○○○ ○○○○○○ ○○○○○○ ○○○○○○ のグラフィックを表示させています。

みんなの回答

noname#35109
noname#35109
回答No.3

#1&2です。 > Flash Lite ?.? と言うのがなかったので… Flash Lite 用 SWF をパブリッシュやムービープレビューできない状態で Fash Lite Flash Lite 用 SWF を作成されているのですか。 かなり無謀に近いことをされていると思いますよ。 FlashMXでも Flash Lite1.0 まででしたらアップデータが出ています。 Adobe モバイル & デバイスデベロッパーセンター i モード http://www.adobe.com/jp/devnet/devices/i-mode.html  ~引用~ > Macromedia Flash Lite 1.0 に対応するための > Macromedia Flash MX アップデータ > > 注意事項: Macromedia Flash MX を利用して > Flash Lite 1.0 のコンテンツを開発する場合、 > 携帯電話用 Flash Lite 1.0 コンテンツを > レビュー / パブリッシュ / テストするためには、 > 下記のアップデータをインストールする必要があります。 > > 英語版 > Windows 用をダウンロード (ZIP, 2.84MB) > Macintosh 用をダウンロード (HQX, 3.89MB) と書いてみましたが,あのあと検証しなおしてみますと, パブリッシュ設定が Flash Player 8 のときのみにエラーが出ますね。 ということは Flash Basic 8 のような気もします。 それだと Flash Lite コンテンツを> レビュー / パブリッシュ / テスト する機能はあきらめないとダメですね...。 ただでさえ難しいのに,さらにかなり難しい状態だと思います。 ===================== > 一番端に行くと止まってしまうので最後の●にいくと > また逆の端に行くようにしたいと思っていますが > そのような事は可能でしょうか? そういう細かいことは, 自力で考えて行くしか先に進めないと思いますよ。 #1の構造をもとに#2のものを作ってあるという条件で, #2のボタンのスクリプトを変えると次のようになります。 ------------------------------------- // 2キーを押したとき(← へ移動) on (keyPress "2") { // 変数 px の値が 0 より大きい場合 if (px>0) { // カーソルMC を 左へ kankaku 動かす cursor_mc._x -= kankaku; // 変数 px の値を 1 減算 px -= 1; } else { // カーソルMC を 右へ kankaku×5 動かす cursor_mc._x += kankaku*5; // 変数 px の値を 5 にする px = 5; } } // 3キーを押したとき(→ へ移動) on (keyPress "3") { // 変数 px の値が 5 より小さい場合 if (px<5) { // カーソルMC を 右へ kankaku 動かす cursor_mc._x += kankaku; // 変数 px の値を 1 加算 px += 1; } else { // カーソルMC を 左へ kankaku×5 動かす cursor_mc._x -= kankaku*5; // 変数 px の値を 0 にする px = 0; } } // 1キーを押したとき(↑ へ移動) on (keyPress "1") { // 変数 py の値が 0 より大きい場合 if (py>0) { // カーソルMC を 上へ kankaku 動かす cursor_mc._y -= kankaku; // 変数 py の値を 1 減算 py -= 1; } else { // カーソルMC を 下へ kankaku×4 動かす cursor_mc._y += kankaku*4; // 変数 py の値を 4 にする py = 4; } } // 4キーを押したとき(↓ へ移動) on (keyPress "4") { // 変数 py の値が 4 より小さい場合 if (py<4) { // カーソルMC を 下へ kankaku 動かす cursor_mc._y += kankaku; // 変数 py の値を 1 加算 py += 1; } else { // カーソルMC を 上へ kankaku×4 動かす cursor_mc._y -= kankaku*4; // 変数 py の値を 0 にする py = 0; } } // 「5」キーを押したとき on (keyPress "5") { // m?? のフレームを進ませる tellTarget ("m" add py add px) { play(); } } ------------------------------------- #2のスクリプトの最後, // 「0」キーを押したとき on (keyPress "0") { が間違っていましたね。すみません。 // 「5」キーを押したとき on (keyPress "5") { でした。 #1と#2のスクリプトのどちらを変更しようか迷いましたが, 訂正ついでに,#2の方のスクリプトを変更することにしました。 ちなみに上のスクリプトですが, 実際にコーディングするときはあまり深く考えていませんよ。 コーディングする前に,「こうしよう」 というプログラムの路線だけを考えて, (↑5秒くらい考えました。ちなみに#1は路線だけ考えるのに30分以上かかっています。) 適当に 感 でActionScriptコード(else文)を書いてみて, (↑適当に書くのに1分くらいかかりました。) その 感 の数字ではうまく行かなかったので, 動作検証しながら数値を色々変えてみて,うまく行かせただけです。 (↑うまく行かせるのに2分くらいかかりました。) 細かいことは, 基本的には自力で大まかな路線だけを考えて, あとは検証しながら(パブリッシュを繰り返しながら), なんとか上手く動くように持って行くようにするしかないと思います。 「右端で5だから戻って0で…???」 と全部正確なコードまでを考えてもできるとは思いますが, 私の場合は検証して失敗しながら調整する方が確実で早いです。 スクリプトも間違っているかどうか考える前にエラーチェックです。 ですからあまり考えていません。うまく行かせただけです。

noname#35109
noname#35109
回答No.2

#1です。 #1のスクリプトをコピペしてみても, そういう(#1の補足で書かれているような)エラーは出ませんよ。 (どうやったらそっくりのエラーが出るのか検証できませんでした。) パブリッシュ設定でちゃんと Flash Lite ?.? を選択されていますでしょうか。 また, ■のボタンに書くべきスクリプトは, ちゃんとボタンシンボルのインスタンスに書かれましたでしょうか, また,そのスクリプトの最後はすごい閉じ括弧(}}}}状態)になっていますが, 閉じ括弧の数にミスはないでしょうか。 インデントを付けると最後の on (keyPress "5") は次のようになっています。 //////////////////////////////////////////////////////////////// // 5キーを押したとき on (keyPress "5") {   // ---以下は当たり判定です---   // 変数 i が 0~29 の間でループ   for (i=0; i<=29; i++) {     // m? の座標が カーソルMC の座標の±10未満で     if (getProperty("m" add i, _x)<cursor_mc._x+10) {       if (getProperty("m" add i, _x)>cursor_mc._x-10) {         if (getProperty("m" add i, _y)<cursor_mc._y+10) {           if (getProperty("m" add i, _y)>cursor_mc._y-10) {             // m? 内のフレームを進める             tellTarget ("m" add i) {               play();             }           }         }       }     }   } } //////////////////////////////////////////////////////////////// ※この↑スクリプトのインデントは,   全角空白文字で入れているため,   このスクリプトをコピペしてもシンタックスエラーになります。 ============================ 以下は訂正ではありません。 訂正ではありませんが#1を回答したあと, ちょっと考えなおしました点がありますので回答します。 縦や横に ● が並ぶ数が それぞれ 『10 個を超えない場合』 でしたら, つまり 『10行10列以内』 でしたら, 全体的な構造はそのままで, ● のインスタンス名を次のようにして, m00 m01 m02 m03 m04 m05 m10 m11 m12 m13 m14 m15 m20 m21 m22 m23 m24 m25 m30 m31 m32 m33 m34 m35 m40 m41 m42 m43 m44 m45 _root のフレーム1に書くスクリプトを次のように変更して, -------------------------- // 間隔を30に設定 kankaku = 30; // xyポジション の初期値を設定 px = 0; py = 0; -------------------------- ■ のボタンに書くスクリプトを次のように変更する方が簡単です。 ------------------------------------- // 2キーを押したとき(← へ移動) on (keyPress "2") { // 変数 px の値が 0 より大きい場合 if (px>0) { // カーソルMC を 左へ kankaku 動かす cursor_mc._x -= kankaku; // 変数 px の値を 1 減算 px -= 1; } } // 3キーを押したとき(→ へ移動) on (keyPress "3") { // 変数 px の値が 5 より小さい場合 if (px<5) { // カーソルMC を 右へ kankaku 動かす cursor_mc._x += kankaku; // 変数 px の値を 1 加算 px += 1; } } // 1キーを押したとき(↑ へ移動) on (keyPress "1") { // 変数 py の値が 0 より大きい場合 if (py>0) { // カーソルMC を 上へ kankaku 動かす cursor_mc._y -= kankaku; // 変数 py の値を 1 減算 py -= 1; } } // 4キーを押したとき(↓ へ移動) on (keyPress "4") { // 変数 py の値が 4 より小さい場合 if (py<4) { // カーソルMC を 下へ kankaku 動かす cursor_mc._y += kankaku; // 変数 py の値を 1 加算 py += 1; } } // 「0」キーを押したとき on (keyPress "0") { // m?? のフレームを進ませる tellTarget ("m" add py add px) { play(); } } ------------------------------------- これで, 当たり判定の複雑な for文 ループを取りはらうことができます。 以上が考えなおしたものです。

noname#43612
質問者

お礼

すみません。下のカーソルずれてます。 一番右に移動です。

noname#43612
質問者

補足

すみません、 Flash Lite ?.? と言うのがなかったのでFlash Player4にすればエラーがなくなりました。 簡単な方法を教えてくださってありがとうございます。 確認をすると、カーソルを縦や横移動した時に 一番端に行くと止まってしまうので最後の●にいくと また逆の端に行くようにしたいと思っていますが そのような事は可能でしょうか? 例:この状態で←に移動すると ●●●●●●●●● ↑ (カーソル) 例:このように逆の一番端に移動する。 ●●●●●●●●●         ↑       (カーソル)

noname#35109
noname#35109
回答No.1

なんとなく思うのですが, Flash Lite 以前に,Flash 自体の理解はそもそも大丈夫なのでしょうか。 フレーム1 と フレーム2 に同じ色の物ばかり並べてもどうしょうもないと思いますが。 あと Flash Lite は バージョン 1.x 系と 2.x 系でスクリプトも構造も全てが変わります。 どちらのバージョンのご質問なのかもわかりません。 以下は, 一応汎用的な面を考えて Flash Lite 1.0 ということで回答します。 また, 以下は作成例ですから, もし試される場合はキッチリと書いてある通りに作成してください。 キッチリと作成しないと無茶苦茶なことになります。 とりあえずは書く通りにしてみて, もしできたなら,そのアレンジを次に考えるという形をとってください。 新規ドキュメントを作成して, パブリッシュ設定で Flash Lite?.? を選択しておき, ステージサイズを目的のサイズに決定します。 直径 20px の黒い塗りの●を書きます。 ※キッチリ 20px です↑(ただし線の太さは含まない)。 その黒塗り●を選択して「修正」→「シンボルに変換」でムービークリップに変換します。 変換するときの基準点は中央です。 ムービークリップに変換しましたら,その黒塗り●をダブルクリックして, ムービークリップ内のタイムラインの編集に入ります。 ムービークリップ内のタイムラインを2レイヤー2フレームにします。  □ レイヤー 筆・・|○  []|  □ レイヤー 筆・・|●//[]| 2レイヤー2フレームにしたら全てのフレームをキーフレームにします。  □ レイヤー 筆・・|○|○|  □ レイヤー 筆・・|●|●| 下レイヤーの方のフレーム2の黒塗り●を,白塗り○に塗りなおします。 そして, 上レイヤーの空白キーフレーム2つに2つとも, stop(); を書きます。  □ レイヤー 筆・・|○|○| ←両方 stop();  □ レイヤー 筆・・|●|●|              黒 白 これで,白黒が変わるムービークリップの作成は終了ですから, メインムービーのタイムライン(ドキュメント)の編集に戻ります。 要は上で作成したムービークリップをたくさんコピペで作成して(30個), 指定したムービークリップ内のタイムラインをフレーム1や2に移動させれば良いということです。 上で作成した直径20pxのムービークリップを, x=20,y=20 (左上の方)に配置します。 ↑※キッチリx=20,y=20 です。 そしてそのムービークリップにインスタンス名を付けます。 この説明では 「m0」 というインスタンス名を付けておいたとします。 それを横に6個,縦に5個コピペで並べますが, その間隔を 30 px にして並べてください。  |30|  ●  ●-       30  ●  ●- 30px は基準点どうしの間隔です。 ●と●の間の隙間を 30px にするということではありません。 30個並べましたら, 各ムービークリップのインスタンス名を次のように変更して行きます。 m という文字と 0 からの連番です。 m0  m1  m2  m3  m4  m5 m6  m7  m8  m9  m10 m11 m12  m13 m14 m15 m16 m17 m18  m19 m20 m21 m22 m23 m24  m25 m26 m27 m28 m29 ここまでできましたら, まだレイヤーは1つのはずです。 レイヤーを1つ追加して, そのレイヤーのステージ上に 今度は緑色の縁が線だけの直径20pxの○を描きます。 塗りを入れない線だけの○という意味です。 線の太さは 2px など少し太めが良いです。 緑線の○が書けましたら, その○を選択して「修正」→「シンボルに変換」でムービークリップに変換します。 変換するときの基準点はこれも中央です。 ムービークリップに変換しましたら, 先に描いておいた m0 の●とピッタリ重なる位置に配置します。 ● の縁に 緑色の ○ が付いたように見えれば良いわけです。 配置しましたら,緑線の○ムービークリップにインスタンス名を付けます。 この説明では 「cursor_mc」 というインスタンス名を付けたとしておきます。 要は, この 緑線の○ が疑似カーソルなのです。 テンキーでフォーカスを移動するような仕様はもとから Flash には備わっていません。 備わっているのは TAB キーでカーソルが移動する順を決定できるだけのことです。 Flash Lite 1.x の場合は,その順すら付けられないので, カーソル自体も自作しなければなりません。 次に 緑線の○ と同じレイヤーのステージ外ワークスペース(白いステージの外)に, 適当な色で ■ を描きます。 これは,色も大きさも適当で良いです。 ステージの外に描いておいて見えなければ良いだけです。 その 適当な色の ■ を「修正」→「シンボルに変換」で, 今度はボタンに変換します。 スクリプトを書くだけなので基準点もどこでも良いです。 そして, その,ボタンに次のように書きます。 ------------------------------------- // 2キーを押したとき(← へ移動) on (keyPress "2") { // 変数 px の値が 1 より大きい場合 if (px>1) { // カーソルMC を 左へ kankaku 動かす cursor_mc._x -= kankaku; // 変数 px の値を 1 減算 px -= 1; } } // 3キーを押したとき(→ へ移動) on (keyPress "3") { // 変数 px の値が 6 より小さい場合 if (px<6) { // カーソルMC を 右へ kankaku 動かす cursor_mc._x += kankaku; // 変数 px の値を 1 加算 px += 1; } } // 1キーを押したとき(↑へ移動) on (keyPress "1") { // 変数 py の値が 1 より大きい場合 if (py>1) { // カーソルMC を 上へ kankaku 動かす cursor_mc._y -= kankaku; // 変数 py の値を 1 減算 py -= 1; } } // 4キーを押したときへ(↓ へ移動) on (keyPress "4") { // 変数 py の値が 5 より小さい場合 if (py<5) { // カーソルMC を 下へ kankaku 動かす cursor_mc._y += kankaku; // 変数 py の値を 1 加算 py += 1; } } // 5キーを押したとき on (keyPress "5") { // ---以下は当たり判定です--- // 変数 i が 0~29 の間でループ for (i=0; i<=29; i++) { // m? の座標が カーソルMC の座標の±10未満で if (getProperty("m" add i, _x)<cursor_mc._x+10) { if (getProperty("m" add i, _x)>cursor_mc._x-10) { if (getProperty("m" add i, _y)<cursor_mc._y+10) { if (getProperty("m" add i, _y)>cursor_mc._y-10) { // m? 内のフレームを進める tellTarget ("m" add i) { play(); } } } } } } } ------------------------------------- 次にメインムービーのタイムラインにもう1レイヤー追加して, そのレイヤーをスクリプト専用のレイヤーと自分勝手に決めておきます。  □ レイヤー 筆・・|○| スクリプト  □ レイヤー 筆・・|●| ←緑色の○ と ■のボタンの  □ レイヤー 筆・・|●| ←30個の● そのスクリプト用のレイヤーに次のように書いて, 各変数の初期値を設定しておきます。 -------------------------- // 間隔を30に設定 kankaku = 30; // xyポジション の初期値を設定 px = 1; py = 1; -------------------------- これで,パブリッシュor ムービープレビュー すればできると思います。 Flash Lite は 普通のFlashの10倍から100倍くらい難しいですよ。

noname#43612
質問者

補足

ご返答ありがとうございます。 全くその通りに作成したのですが、以下のエラーが出てしまいました。 ---------------------------------------------------- **エラー** シーン = シーン 1, レイヤー = レイヤー 2, フレーム = 1 :行 47:')' または ',' が必要です。 if (getProperty("m" add i, _x)<cursor_mc._x+10) { **エラー** シーン = シーン 1, レイヤー = レイヤー 2, フレーム = 1 :行 48:')' または ',' が必要です。 if (getProperty("m" add i, _x)>cursor_mc._x-10) { **エラー** シーン = シーン 1, レイヤー = レイヤー 2, フレーム = 1 :行 49:')' または ',' が必要です。 if (getProperty("m" add i, _y)<cursor_mc._y+10) { **エラー** シーン = シーン 1, レイヤー = レイヤー 2, フレーム = 1 :行 50:')' または ',' が必要です。 if (getProperty("m" add i, _y)>cursor_mc._y-10) { **エラー** シーン = シーン 1, レイヤー = レイヤー 2, フレーム = 1 :行 52:')' が必要です。 tellTarget ("m" add i) { **エラー** シーン = シーン 1, レイヤー = レイヤー 2, フレーム = 1 :行 55:予期しない '}' があります。 } ActionScript エラー数 :6 報告済みエラー :6 ----------------------------------------------------

関連するQ&A