• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ボールが坂を転がる動きを作りたいのですが)

Flash8 Professionalを使用して坂を転がるボールの動きを作りたい

このQ&Aのポイント
  • Flash8 Professionalを使用して、Windows XP環境で坂を転がるボールの動きを作りたいと考えています。
  • 直線の坂を転がるボールの動きは既に参考サイトを利用して作成することができました。
  • しかし、緩やかなカーブの坂を作成し、ボールがその坂に沿って転がるようにする方法について悩んでいます。三平方の定理を使用して円の内側にボールを転がすことはできるが、ボールが円の外に出ることができないため、円ではなく弧だけの状態の坂を作りたいと考えています。直線の坂と同様に、弧の始点と終点の座標を定義し、ベクトルと法線を求めて反射処理を設定する方法があれば教えてください。

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

  • ベストアンサー
  • moppe_77
  • ベストアンサー率28% (4/14)
回答No.5

こんにちは。 普段はWebデザイン中心で、ゲームは殆ど作らないので、もっと 適切な方法があるのかもしれません。 あと、現在Flashに触れられる状況でないのですが、こういうことは 是非作ったみたいと思います。少しお時間をいただきますが、2月い っぱいまで、ここの質問を締め切らないでいただければ、私もやって みたいと思います。他の方の回答もあるかもしれません・  締め切られていましたら、質問文のHPの掲示板にでも書き込んでお きます。1月くらい先になりますが、それでもよろしければ・・・・

milk123
質問者

補足

こんにちはmoppe_77さん。 あれから試行錯誤しましたが、半分ぐらいまでは成功しました! 大きな円内で定めた始点Aと終点Bの下半円の円弧で転がり、設定した y座標をボールが超えると円内から脱出する事に成功しました。 しかしながら円内から脱出し円の外で再び設定したy座標より下へ降り た場合、ボールが強制的に円弧内へ戻されるという変な動きをどう するか現在試行錯誤中です。三平方の定理で円の内側からも外側からも 両方から判定を取る事は以前試作した段階で成功していますので外側 から円弧に当たった時も同じように設定してやれば出来ると思ったの ですが最初の内側からの三平方の定理が生きたままのようでこれをどう してやるか現在も試行錯誤中です。ですが円を飛び出すという最初の 問題は突破する事が出来ました。まだ未完ですしmoppe_77さんもflash をお使いになれる環境ではなくこの方法を試作されたいとおっしゃって くださいましたし私の試作した物よりきっとmoppe_77さんの考えられて る方法の方が適切な方法だと思いますので締め切らずにこのまま置い ておきますね。すごい参考になり嬉しいです。ありがとうございます!

その他の回答 (4)

  • moppe_77
  • ベストアンサー率28% (4/14)
回答No.4

すいません。訂正です。 訂正前 AC=r AO=R OP = Y1より、      Y2 = CQ = r*Y1/R となります。 訂正後 AC=r AO=R OP = Y1より、      Y2 = OP - CQ = Y1 - r*Y1/R となります。

milk123
質問者

補足

こんばんはmoppe_77さん。ありがとうございます。 素晴らしいです。先程家に帰ってきてざざっと読ませて もらい、紙に図を書いて確認したらいけそうな気がしてきました。 まだASを書いて試してませんが今から試してみます! もし上手く動作しなかった時は私のAS記述に問題があるのかも しれません。。。自分でも頑張って試行錯誤してみますが moppe_77さんのせっかくの素晴らしいご提案が水の泡にならないよう これらの式をASファイルに記述する留意点等をお時間ありましたら ご教授願えたら嬉しいです。

  • moppe_77
  • ベストアンサー率28% (4/14)
回答No.3

>三平方の定理でボールを大きな円の中に >入れてバウンドさせると惰力を失い始めた頃に円の曲線に沿って滑る >という良い動きをしますがこの場合は円の外へ抜け出せないのが問題 >で何とか弧だけの状態を作れないかと思っています。 円の外に抜け出す方法になるかわかりませんが、 ある高さを超えた場合に三平方の定理による判別 をやめるという方法は次の方法でどうでしょうか? 大きな円の中心座標O(a,b)、半径R ボールの半径r 中心C(m,n) 弧(左A→B右)の   始点A(x1,y1)   終点B(x2,y2) とします。 簡単のため、y1=y2,a=b=0のときを考えます。 (1)y1=y2=Y1とします。 このとき、弧はY1よりも低い位置にあることは分かりますか? (円周内部に沿って転がることを前提にしています。) y座標の高さの順番は、 (2)         0>Y1>円弧                   ですね。 次に、ボールが時計周りに円周をすすんでいるもの と考えます。 当然、ボールは始点Aに向かっていますね? (3)さて、時間がすすんでボールが一番限界の位置、 つまり始点Aと接している場合になりました。この ときのボールのy座標をY2とします。 三平方の定理だけの判定の場合、ボールy座標がY2 より高いとき、つまり円弧に接していないときでも 判定し続けるために、大きな円から抜け出せないの ではないかと思います。 そこで、ボールのy座標がY2よりも高くなった時に、 円周内部に沿って転がす条件が偽になるように条件 分岐させればいいものと思います。 そこでY2を求めます。 さらに、P(0,Y1),Q(m,Y1)としたとき、 △AOPと△ACQは相似であることが分かります。 相似比より、       AC:AO = CQ:OP AC=r AO=R OP = Y1より、      Y2 = CQ = r*Y1/R となります。 0>Y1>Y2>円弧 が円弧に接している時です。 0>Y1=Y2>円弧 が限界の位置です。 0>Y2>Y1>円弧 が円弧から離れた場合です。 このY2値よりもボールのy座標が高くなったときに、 円周を沿う条件分岐を偽にすればうまく ・・・・・・いくと思います。 申し訳ないのですが、Flashが使える環境にありませ んので、なんともいえません。間違っていましたら ご容赦くださいませ。

  • moppe_77
  • ベストアンサー率28% (4/14)
回答No.2

こんばんは、milk123さん。 申し訳ありませんが、補足からはどういったアニメーションで あるか解りかねます。私の想像していたアニメーションは、 1螺旋階段をすべり下りるボールのアニメーション、 2空洞の半球内部でボールを転がすアニメーション ですが、いかがでしょうか?

milk123
質問者

補足

moppe_77さんこんばんは。 つたない説明文でお分かりづらかったようですみませんでした。 空洞の半球内部でボールを転がすアニメーションが一番したい事です。 半球内部で転がり、円の外へも自由に出入りする事が出来るボールの アクションを求めています。螺旋階段をすべり下りるアニメーションも 私が作ろうと思っている物にとっては大変意義がある事なのでそちらも ぜひ参考にさせて頂きたいと思っております。 要はステージ内に半円状の障害物や直線状の障害物を設置して ボールを転がすflashを作りたいのです。 説明不足で大変ご迷惑をおかけしましたがよろしくお願い致します。

  • moppe_77
  • ベストアンサー率28% (4/14)
回答No.1

螺旋運動(x,y,zの3方向)をさせて、部分的に再現してみてはどうですか? 水平方向と鉛直方向の運動に分けて、  水平方向:円運動  垂直方向:落下運動 ええと、想像だけで実際にスクリプトを書いてみなければわかりま せんが・・・・(本当ならばASファイルでもお作りしてもよかったの ですが、仕事の都合で一時的にLinuxを使っているもので・・・・) FLASHに限らず、アニメーションを作る際には、物理なんかの参考書を 1冊もっていると参考になりますよ? というわけで、ヒントになれば幸いです。。

milk123
質問者

補足

moppe_77さん、回答ありがとうございます。 螺旋運動で部分的に再現ですか。思いつかなかった方法です。 ちなみにボール自身には重力・空気抵抗・反発係数を設定しており ドラッグ可能で離すと普通のボールのようにステージ内を跳ね回る ようにはしてあります。物理の参考書も1冊買って読んではみたんです が曲線のベクトルの方法が載ってないようで四苦八苦していました。 その螺旋運動の方法では曲線に沿ってボールを滑らせる事は可能だと 思いますが、曲線にボールが当たった時は跳ね返るようにしたいのです が可能なのでしょうか?三平方の定理でボールを大きな円の中に 入れてバウンドさせると惰力を失い始めた頃に円の曲線に沿って滑る という良い動きをしますがこの場合は円の外へ抜け出せないのが問題 で何とか弧だけの状態を作れないかと思っています。 もしお時間がありましたらその螺旋運動を参考にさせて頂きたいので ソースを書いて頂けましたら幸いです。お忙しい中に回答頂き ありがとうございました^^