メイン コーダーズルーム【スクリプト系】 比較演算子の記述の仕方 | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
hideroku | Åê¹ÆNo.11458 投稿日時: 2004-10-12 19:17 |
新米 居住地: 投稿: 16
使用環境:
WinXP Flash MX2004pro |
比較演算子の記述の仕方 こんにちは、hiderokuと申します。
今、ボタンをクリックしたタイミングで判定結果が変わる ゲームを作ろうと思っていて、比較演算子のところで悩んで います。 ルートにインスタンス名「MC1」というムービークリップを配置しています。 このムービークリップはフレーム数を30フレームにしました。 ルートにボタンを配置し、ボタンを押したときに 「MC1」のフレーム番号を取得して 「MC1」のフレーム1?6の時は「エリア1」へ 「MC1」のフレーム7?14の時は「エリア2」へ 「MC1」のフレーム15?22の時は「エリア3」へ 「MC1」のフレーム23?30の時は「エリア4」へ というふうにしようとしています。 しかし、うまいこと動作してくれません。 「エリア1」、「エリア2」は正しく?判定しているようなんですが 「MC1」のフレーム15以上になると「エリア4」と判定されているみたいなのです。 ルートに配置したボタンに次のアクションスクリプトを記入しています。 ----------------------------------------------------------- on (press) { MC1No = this.MC1._currentframe; MC1_1 = ((MC1No <= 1) || (MC1No <=6)); MC1_2 = ((MC1No <= 7) || (MC1No <= 14)); MC1_3 = ((MC1No <= 15) || (MC1No <= 22)); MC1_4 = ((MC1No <= 23) || (MC1No <= 30)); trace("番号" + MC1No); if (MC1_1){ trace("エリア1"); } else if (MC1_2){ trace("エリア2"); }else if (MC_1_3){ trace ("エリア3"); }else if (MC1_4){ trace("エリア4"); } this.MC1.stop(); } ------------------------------------------------------------ なんか根本的に比較演算子の記述の仕方というか 考え方が違うのでしょうか? 私は説明が下手なもので聞きたい事が伝わってるかどうか 不安なので一応、FLAファイルをアップしてあります。 http://www.eurus.dti.ne.jp/~hideroku/hantei.html 宜しくお願いします。 |
永井勝則 | Åê¹ÆNo.11459 投稿日時: 2004-10-12 20:43 |
職人 居住地: 白馬村 投稿: 796
使用環境:
Windows 7 :Flash CS4: 10.6.8 :Flash CS5.5 |
Re: 比較演算子の記述の仕方 永井勝則です。
mcFrameNum = 22//ここに調べたい数字を入れる if (mcFrameNum>=23) { trace("エリア4"); } else if (mcFrameNum>=15) { trace("エリア3"); } else if (mcFrameNum>=7) { trace("エリア2"); } else if (mcFrameNum>=1) { trace("エリア1"); } で、いけると思います。 ちなみに、MC1_1、MC1_2・・・の部分は、 trueかflaseが代入されるだけです。 なので、その下のif文は、最初がtrueなら trace(”エリア1”)が、実行され、 falseならtrace("エリア2")が実行されるだけです。 引用:
|
野中文雄 | Åê¹ÆNo.11460 投稿日時: 2004-10-12 21:22 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 比較演算子の記述の仕方 永井さんがご指摘された変数のスペルミスを修正すれば、結果としては動作します。
引用: hiderokuさんは書きました: ただ、変数MC1_1に代入した「6以下または1以下」という評価は、結局「6以下」です。以降の論理和||の評価も同様です。なお、ifステートメントにおける「条件の順序」については、「if/else if/elseアクションを使った処理」をご参照ください。
ご使用の環境は、プロフィールに記入しましょう。 引用: |
hideroku | Åê¹ÆNo.11461 投稿日時: 2004-10-12 22:14 |
新米 居住地: 投稿: 16
使用環境:
WinXP Flash MX2004pro |
Re: 比較演算子の記述の仕方 hiderokuです。
永井勝則さん、すばやい返信ありがとうございます! 引用:
あっif文ってそうでしたよね 記述した順にtrueかfalseを判定していくって。 しかもしっかりスペルミスもしていましたね...。 ご指摘ありがとうございます。 これで先に進めます。ありがとうございました。 |
hideroku | Åê¹ÆNo.11462 投稿日時: 2004-10-12 22:26 |
新米 居住地: 投稿: 16
使用環境:
WinXP Flash MX2004pro |
Re: 比較演算子の記述の仕方 hiderokuです。
野中文雄さん、返信ありがとうございます! 引用:
そうなんですよね。「結局6以下」ってことなんですよね。 自分でもコードを書きながらなんかちがうんじゃないかな? とか思いながら書いてたんですが。 どうも 1フレーム?6フレームまでは 7フレーム?14フレームまでは... ということを考えすぎてたのかもしれないです。 それと永井さんにご指摘された 記述した順に評価をしていくということを すっかり忘れていました。 ありがとうございました! プロフィールの記入の仕方間違ってましたね こちらも重ね重ねご指摘ありがとうございます。 |
野中文雄 | Åê¹ÆNo.11463 投稿日時: 2004-10-12 23:57 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 比較演算子の記述の仕方 「1フレーム?6フレームまで」であれば、論理積演算子&&ですね。
引用: hiderokuさんは書きました: もちろん、「条件の順序」をきちんと整理すれば、条件はひとつずつで足ります。 引用: それと永井さんにご指摘された さらに、今回の処理限定でしたら、ステートメント1行で済みます。 なお、範囲外の値(0以下または31以上)判定は、考慮していません。
|
hideroku | Åê¹ÆNo.11487 投稿日時: 2004-10-13 15:04 |
新米 居住地: 投稿: 16
使用環境:
WinXP Flash MX2004pro |
Re: 比較演算子の記述の仕方
あっなるほどこのように書くんですね。 引用: さらに、今回の処理限定でしたら、ステートメント1行で済みます。 なお、範囲外の値(0以下または31以上)判定は、考慮していません。 うわ、確かにこの1行で済んでしまいますね 「trace」の部分をgotoAndPlayに変えて少し手を加えれば 判定結果を表示させるフレームに飛ばせることもできますね。 この1行の中に「8」という数字が出てきますが この「8」という数字はどのようにして導きだした 数字になるんでしょうか? 永井さん、野中さんのご指摘のおかげで少し前進すること ができました。それで昨日あれから自分なりに 手を加てみました。 「MC1」だけだと判定結果が4つだけなので「MC2」を加えて MC1とはフレーム数を変えて判定結果を16通り出せる ようにしてみました。自分の思ったとおりに動作してくれてる みたいですが条件分岐のスクリプトを書いてるとき多少混乱 しながら書きました。これが32通りとかになると悪寒が... とても長い文になってしまいしたので引用するのはご迷惑かと思い http://www.eurus.dti.ne.jp/~hideroku/hantei.html にアップしときました。よかったら見てやってください。 |
野中文雄 | Åê¹ÆNo.11495 投稿日時: 2004-10-13 21:42 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: 比較演算子の記述の仕方 7?14、15?22、23?30は、いずれも長さが8フレームです。したがって、8で切り分けることができます。
引用: hiderokuさんは書きました: 引用: hiderokuさんは書きました: 全体に1を加算(MC1No+1)すると、8で割った商(Math.floor((MC1No+1)/8)がエリア単位で等しくなります。商は、0?3になるので、1を加算すれば、求めるエリアの値です。
|
hideroku | Åê¹ÆNo.11496 投稿日時: 2004-10-13 23:01 |
新米 居住地: 投稿: 16
使用環境:
WinXP Flash MX2004pro |
Re: 比較演算子の記述の仕方 引用:
あっやはり8フレームってことだったんですね。 エリア1の時は1?6フレームだったので違うのかな? って思っていました。 引用: 全体に1を加算(MC1No+1)すると、8で割った商(Math.floor((MC1No+1)/8)がエリア単位で等しくなります。商は、0?3になるので、1を加算すれば、求めるエリアの値です。 う?ん確かにそうですね 10フレームで割り振った場合だとMath.floor()ではなくMath.ceil()を使って
にすると求めるエリアの値になったりしますね。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |