hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
物理のおおまかな話 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

小ワザ

物理のおおまかな話

 やっぱり3Dゲーム作るなら(2Dゲームでも場合によっては)ある程度の物理の知識ぐらいはないとそれらしく出来ないだろうと思います。
ゲームを作る程度なら高校物理程度の知識があれば十分ですが、高校で物理を先攻しなかった人や、まだ高校生ですらない人、 物理習ったけど忘れた人、などなどいると思います。
そんな人のために、ゲーム用におおまかな話でも書いておこうかと。
基本的に説明はサッカーゲームを中心に話す予定です。要するに単純なボールの運動についてです。


  • できるだけ避けるようにしていますが、難しい言葉や聞きなれない言葉がちらほら出るかもしれません。
    極力知らなくてもいいように書いているつもりですが、気になったら検索してみてください。
  • 力の概念が分からなくてもいいように、またすぐにでも使えるように説明は速度中心で行っています。
    一部では無理矢理速度の式に変換してありますので、ネットや教科書を探してもそのままの式は載ってないこともありますので注意してください。
  • ここで紹介している式を暗記しないように!どこでも何でも通用するような計算式ではありません。十分注意してください。
  • 間違っているところがあれば容赦なくツッコミと訂正を入れてやってください。(平手裏拳付きで…)



物理の前に

 3D系のゲームでは1秒間に数十回画面を書きかえることで、画面をアニメーションさせていることは ご存知でしょう。その書き換え回数がFPSという単位です。
 
 映画やTVアニメでは通常 24FPSだそうです。最近のゲームでは 60FPSが一般的なようです。
24FPSというのは経験値から得られた映像がアニメーションしているように見える最低ラインだそうです。
最低でも 24FPSをきらないよう注意しましょう。
 
 ゲームで60FPSということは、画面を書き換える間隔が、1/60秒ということになります。
1コマ描画して次のコマを書くまでに 1/60秒経過するわけです。この蓄積がアニメーション映像になるわけです。
 



基本的な要素

基本的な要素は、おおよそ以下のようなのがよく出てきます。
気が向いたら調べてみてくらはい。気が向いたらで結構です。ざっと読み飛ばしても問題ないと思います。

  • 距離 -- x,y,z,l...
  • 速度 -- v
  • 時間 -- t
  • 加速度 -- a,acc
  • 質量 -- m(簡単なゲームぐらいならあんまり気にしなくていいかも…)

本当の物理では

  • 距離
  • 質量
  • 時間

が結構重要な要素なのですが、ゲーム用なのでまぁいいかなと。(^ ^;;
(後の細かいのは微積とかで、ね。)




本編の目次

予告と予定内容(変更あり-_-;)

  • ボールの回転と揚力の関係はいずれ。…とか言っておいてやらずじまいにしてしまいそうな予感。(^ ^;;;

コメント

  • サンプルの動作がカワイイ^^; -- kz3 2005-09-25 08:49:24 (日)
  • 飛ぶボールその2(空気の中を飛ぶ)楽しみです。自分で作ったのに自信がない(ノД`)シクシク -- araran 2005-09-26 13:44:01 (月)
  • 縮尺はこうやって考えればいいのかぁ・・・〆(..メモメモ
    ayが重力加速度まるめ値で・・・〆(..メモメモ -- kz3 2005-09-26 15:28:04 (月)
  • あっ?!araranさんだっ!(順番逆。スクリプトと関係ないコメントでした汗。 -- kz3 2005-09-26 15:30:31 (月)
  • ゲームだから見た目okならokだと…。 -- GENKI? 2005-09-26 21:39:14 (月)
  • むぅ…そろそろページ分割しないとみにくいっすね。飛ぶボールその2はもうちょいお待ちを。 -- GENKI? 2005-09-27 00:08:29 (火)
  • 本文書き忘れ。メモメモ。引力による加速度は 9.8m/s^2 です。あくまで参考値程度にどうぞ。跳ね返りや摩擦の係数は見た目で調整するのがいいかと。(サッカーならそれなりにちゃんとした資料はどこかにあるんだろうとは思いますが) -- GENKI? 2005-09-27 00:15:11 (火)
  • みつかったー!!しかもページまでΣ(゚Д゚;エーッ! -- araran 2005-09-27 09:56:30 (火)
  • もちろん見た目で調整、最後はゲームバランスだと思うのですが、現状はある程度リアルな数値を元に作らないと色々とバランスが(´・ェ・`)  自分が蹴ったボール簡単に追い越したりしちゃいますw -- araran 2005-09-27 09:58:30 (火)
  • 空気抵抗がおっきいのかな? -- GENKI? 2005-09-28 23:29:52 (水)
  • 物理のおおまかな話/飛ぶボールその2(空気の中を飛ぶ)にトラックバックしました。ありがとです。 -- araran 2005-09-29 12:31:23 (木)
  • Σ(゚Д゚;)ごめんなさい。どうやら転がるボール飛ぶボールその2まちがえてるっぽいです…再検討してみますんでちょっと待っててください。m(_ _;;)m -- GENKI? 2005-09-29 23:38:31 (木)
  • およよ?なんかうまくいってますよ。暇だったら僕のBlog見てください。 -- araran 2005-09-30 10:39:02 (金)
  • 転がるボールを修正しました。ちょびっとだけ変わってるので注意。…導出方法間違えてたのに気付いてやり直したんですが、結果的にはたまたま似た式になりました。 [tere]@@すんましぇん@@ -- GENKI? 2005-10-01 22:17:34 (土)
  • 次は空気抵抗みなおしてきまっす! -- GENKI? 2005-10-01 22:21:19 (土)
  • あれ・・・転がるぼーるが空気抵抗すくりぷとのようだけど・・・ -- kz3 2005-10-01 23:10:51 (土)
  • あ、空気抵抗スクリをベースに作業してたんでうっかりわすれてました。修正修正っと…。 -- GENKI? 2005-10-02 03:28:18 (日)
  • リニューアル中…飛ぶボールその1まで完了。 -- GENKI? 2006-02-19 (日) 00:03:27
  • 飛ぶボールその3まで終了〜。 -- GENKI? 2006-02-19 (日) 19:32:22
  • バウンドしたときなんかに値が集束しないバグが…どう回避しようかな。 -- GENKI? 2006-02-19 (日) 19:33:54
  • バウンドの問題は解決できそうです。 -- GENKI? 2006-02-22 (水) 22:42:25
  • バウンドが集束しない(振動しっぱなしになる)バグを修正。これで任意の加速度を入れても振動しなくなります。速度計算をいい加減にしていたのがいけなかった…。(^ ^; -- GENKI? 2006-02-23 (木) 23:45:35
  • 今回はバネです。引っ張って遊ぶだけでもそこそこ楽しいかも。回転とか揚力はいつになるやら。 -- GENKI? 2006-04-16 (日) 16:56:50
  • 一部ですがHSP3に書き換えてみました。跳ねるボールについてですが、床と衝突したときの速さを表す式に加速度の2乗を考慮する必要はないのでは?と思います。 -- eller 2007-02-14 (水) 9:34:00
  • HSP3化ごくろうさまです。 [bsmile2]  言われてみればsqrt (vy*vy) - (2*ay*(py-400))が正解な気がしてきました…。 [worried2] でもあの式だと重力加速度大きくしてもちゃんと集束するんですよ。うーん、どうやって導き出したんだったか忘れてしまった…計算メモが見つかったのでもう少しにらめっこしてみます。ちゃんとまとめてないので当時何を考えてたのかさっぱり分からない…。なにかわかったら詳細報告します。 [ojigi] -- GENKI? 2007-02-15 (木) 00:25:37
  • どうやらかなり怪しい手法による計算をやった結果、たまたま0に集束するようになったので「これで正解なのだろう」と思っていたようです。 [ojigi] 0になる原因まではわかりませんでした。
    	sqrt 2*ay*(400-py) + (vy*vy) + (ay*ay)
    	vy = stat * -4/5
    なぜか0に集束する不思議な計算式。 -- GENKI? 2007-02-16 (金) 00:30:15
  • 怪しい計算式を掲載してしまい、申し訳ございませんでした。 [tere] ellerさんご指摘ありがとうございます。さて、整数計算のHSP2の場合は下手に衝突時の速度を算出しないほうが値は集束しやすいようなので後日修正しておきます。(土日作業予定)うーん、他の記述も見直したほうがよさそう…。 -- GENKI? 2007-02-16 (金) 00:42:25
  • お役に立てて何よりです [bsmile] -- eller 2007-02-16 (金) 06:11:20
  • 修正完了。 [rajya] -- GENKI? 2007-02-21 (水) 00:14:32
  • 思いつきでやったわりには結構きれいに集束してくれました。
    vy = vy * -4/5	;跳ね返り係数 -4/5
    if (-g<vy)&(vy<0) : vy = 0
    集束する値も大体これぐらいの値なんで、そう大きくは外れてはいないと思います。 -- GENKI? 2007-02-21 (水) 00:16:41
  • 日本のTV(NTSC)だと30(29.97)FPSかと・・あとアニメで動きの早いのでも、2、3枚同じ絵が連続だったりするようです。 -- つくね? 2008-10-20 19:24:00 (月)
  • ちょっと知る機会がありましたので書きます。
    日本のTVアニメーションの世界では1秒あたりの枚数を削る手法を「nコマ打ち」というそうです。
    フルアニメ(24枚/秒)、1コマ打ち(12枚/秒)、3コマ打ち(8枚/秒)といった感じです。 ただし、上手く使わないと動いているように見えないらしく速い(動きが大きい)シーンでコマ打ちすると違和感が大きくなるため、遅いシーンで使われることが多いようです。 人が普通に行動する程度のシーンなら3コマ打ち程度がちょうどいいそうで、あえて使われているようです。コマ打ちは作業量節約だけでなくヌメっとした動きにならないようにする技術だそうです。 -- GENKI? 2009-02-12
  • 国内のTV放送は30フレームなので、アニメーションは24から30に放送用に変換するようです。資料 -- GENKI? 2009-02-12
  • このように動きが速いシーンでは多いフレーム数で、ゆっくりなシーンではフレーム数を少なく、というような使い分けをプログラム上でやるのは大変なので、速いシーンに対応できる24フレーム以上を目安に、フレーム数を固定したほうがいいでしょう。 -- GENKI? 2009-02-12
添付ファイル:
filemp002.as
185件 [詳細]
filemp001.as
1603件 [詳細]
filebutu_img01.png
169件 [詳細]