- ベストアンサー
suzukaでの携帯flash作成
- suzukaで携帯のメニューアイコンを作る方法や、swf6でのfscommandの使用方法について質問があります。
- for文を使用してmcオブジェクトの座標を操作していますが、エラーが発生してうまく動作しません。
- swf4で作成することにしましたが、for文の条件式に間違いがあるかどうか、またswf6でfscommandを使う方法があるかどうか教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 遅くなりました。 > 『_』を消してもう一度試してみます。 > > 度々すみませんが計算式に間違いはありますか? > できればアドバイスお願いします。 とりあえず長い方のスクリプトにある『_』を消してうまく行きませんでしたか? 一応はうまく行きましたが。 まず前置きです(結構重要)。 「ParaFla! を使用されている方々が, なぜ サイトに情報を出せるほどSWF4 に詳しいのか。」 私はこれが不思議で不思議で, 最初わからなかったのですが(すごい解析者の集まりか!? などと思ってました...), ParaFla! を少しやってみると,すぐに答えがわかりました。 coaさん(ParaFla! の作者)が説明と良いサンプルをちゃんと用意されているからです。 ※ちなみに私は Suzuka に関してはある程度わかりますが, ParaFla! に関してはあまり(ほとんど)わかりません。 ※なおURLを見ればわかると思いますが, 人柱版の .dll も coaさん 作ですから, 決してアヤシイ物ではありません。 動作検証も十分でなく,既知の不具合もある。 という意味での人柱版だと思います。 話を元にもどして。 ParaFla! をダウンロード&インストール(解凍)させてもらうと, ParaFla!をインストールしたフォルダ\sample\sample07 フォルダに 「readme.txt」と「actionscript.pfl」が入っています。 この2つのファイルが参考になると思います。 私も上記2ファイルを参考に, まず配列アクセス演算子を使った方を書き替えてみました。 そのまま書き替えただけでは,当然何も動作しないので, 「mc0~mc11 が下に 10px ずつ移動して, mc0~mc11 の y座標が 651 よりも大きくなれば, その座標から -1116px 上に戻る。」 というものにしてみました。 次のスクリプトが例えば _root の フレーム1 に書くスクリプトです。 --------------------------------- for (i=0; i<12; i++) { // 以下は勝手に付け足した部分 tellTarget ("/mc" & i) { this.y += 10; /:myY = this.y; //←_root.myY に座標を記録 }; // 以上は勝手に付け足した部分 //--- // 以下の部分が書かれていらっしゃるものの修正版 if (/:myY>651) { //←記録しておいた root.myY で判断 tellTarget ("/mc" & i) { this.y -= 1116; }; } } --------------------------------- そして _root の フレーム2 には次のように書きます。 ----------------------- gotoAndPlay(1); ----------------------- これで mc0~mc11 が上から下に移動し, 再び上から現れるというものになります。 配列アクセス演算子を使わない長い方も, 同様にそのまま書き替えると次のようになります。 --------------------------------- // 以下は勝手に付け足した部分 for (i=0; i<12; i++) { tellTarget ("/mc" & i) { this.y += 10; }; } // 以上は勝手に付け足した部分 //--- // 以下の部分が書かれていらっしゃるものの修正版 if(/mc0.y>651){ /mc0.y-=1116; }else if(/mc1.y>651){ /mc1.y-=1116; }else if(/mc2.y>651){ /mc2.y-=1116; }else if(/mc3.y>651){ /mc3.y-=1116; }else if(/mc4.y>651){ /mc4.y-=1116; }else if(/mc5.y>651){ /mc5.y-=1116; }else if(/mc6.y>651){ /mc6.y-=1116; }else if(/mc7.y>651){ /mc7.y-=1116; }else if(/mc8.y>651){ /mc8.y-=1116; }else if(/mc9.y>651){ /mc9.y-=1116; }else if(/mc10.y>651){ /mc10.y-=1116; }else if(/mc11.y>651){ /mc11.y-=1116; } --------------------------------- そしてフレーム2には gotoAndPlay(1); です。 これで一応は動作するものができます。 しかし, 例えば mc0 と mc1 のy座標が,同時に 651 より大きくなった場合, if(/mc0.y>651){ /mc0.y-=1116; }else if(/mc1.y>651){ /mc1.y-=1116; } ↓↓意味↓↓ もし (/mc0.y>651 であれば) { /mc0.y を 1116 減算する } それ以外で もし (/mc1.y>651 であれば){ /mc1.y を 1116 減算する } 「else」=「それ以外で」=「/mc0.y>651 以外で」 なのですから, mc1 に対しての /mc1.y-=1116; は実行されません。 したがって, もし mc0 と mc1 が独立した動きをするものでしたら, else は削除した方が良いと思います。 --------------------------------- // 以下は勝手に付け足した部分 for (i=0; i<12; i++) { tellTarget ("/mc" & i) { this.y += 10; }; } // 以上は勝手に付け足した部分 //--- // 以下の部分が書かれていらっしゃるものの再修正版 if(/mc0.y>651){ /mc0.y-=1116; } if(/mc1.y>651){ /mc1.y-=1116; } if(/mc2.y>651){ /mc2.y-=1116; } if(/mc3.y>651){ /mc3.y-=1116; } if(/mc4.y>651){ /mc4.y-=1116; } if(/mc5.y>651){ /mc5.y-=1116; } if(/mc6.y>651){ /mc6.y-=1116; } if(/mc7.y>651){ /mc7.y-=1116; } if(/mc8.y>651){ /mc8.y-=1116; } if(/mc9.y>651){ /mc9.y-=1116; } if(/mc10.y>651){ /mc10.y-=1116; } if(/mc11.y>651){ /mc11.y-=1116; } --------------------------------- こちらの else を削除した方が, 最初に書いた tellTarget を使用する短い方のスクリプトと同じ意味になります。 ご存じかもしれませんし, 今回のご質問に関して役に立つかどうかはわかりませんが, Suzuka の SWF4 に関しては次のサイトがかなりすごいです。 サンプル(csfプロジェクトファイル)もたくさん配布されています。 特に数学がかなり高度です。 「携帯フラッシュ」 http://kfla.mitekaite.com/
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
Suzuka のスプライトなどの座標 _y プロパティは, SWF4 の場合, y になります(「_(アンダースコア)」は付けてはダメです)。 あと,配列アクセス演算子 [ ] は使えません。 代わりに Adobe Flash では eval関数 を使用しますが, Suzuka の場合 eval も使用できません。 Suzuka と ParaFla! はコンパイルエンジンが共通で, この辺は ParaFla! 仕様に準じなければなりません。 以上のことはこの辺が参考になると思います。 ▲ SWF4のスクリプト書式 http://nuko.info/memo/#pf02 >またswf6でfscommandを使う方法はないんでしょうか? これは, fscommand ではなくて,fscommand2 のことではないかと思いますが。 fscommand2 と SWF6 以上との共存は基本的にできません。 しかし ParaFla! の 「SWF6以降でFSCommand2に対応してみる人柱版 (aclib.dll)」 というものが存在します。 ZIPファイルへの直リンクはここではよろしくないので, Google で 「SWF6以降でFSCommand2に対応してみる人柱版」 と検索してみてください。 ZIPファイルへのURLや使い方などのサイトが見つかると思います。 その動作保証などがない人柱版DLL を使用すると, SWF6以降の書き出しも可能になります(なるらしいです(Suzukaでも(しかしあくまでも人柱版(なので自己責任で))))。
お礼
早速のご回答ありがとうございます。 やはり配列アクセス演算子は使えないのですね・・・ aclib.dllはあるのですがあまり変化がなくて… 『_』を消してもう一度試してみます。 度々すみませんが計算式に間違いはありますか? できればアドバイスお願いします。
お礼
ご丁寧な解説ありがとうございます。 試してみたらうまくいきうそな雰囲気でした。 『tellTarget』は知りませんでしたね・・・ 以後、活用していこうと思います。