狠狠撸

狠狠撸Share a Scribd company logo
物理
今回の目标は、重力で落下するキャラクタを作ること!
どうすると落下するの?
今までやっているのでなんとなくわかると思いますが、
キャラクタの位置をどんどんズラしていけばよいです!
試しにプレイヤーの値をどんどん増やして
位置を移動させてみましょう!
どうです?
自然な感じになりました?
…でも
画面の外に出ていきましたよね?w
それはバグです!
なんとかしないといけません!
でもどうやって?
実は、今日までの内容で解決できる課題です。
時間をとるので、解決方法を考えてみてください!
プログラムは書かなくても大丈夫なので、
これが出来ればなんとかできる、という方法を紙に書いてみて!
ヒント 1
今
地面
次の瞬间
どう?
これでなんかヒントになりました?
でもこれはヒントで、おそらくこれをなんとか応用して
さらにアレンジする必要があります。
ここでさらにお待ちしますので、
どうすれば良いのか考えてみてください!
ヒント 2
次の瞬间
この図は結構色々なヒントをくれる図です。
よくよく見てるとこういう風に見えてきます。
次の瞬间
こういう風にみると、過去にやった内容に似てきますねぇ。
この図まで辿りつければそろそろ答えが近いです!
さっきの図を极端にしてみると、
見やすさを上げるために、シンプルにして大きさを変えてみました。
こう!
そして私たちはこの情報を持っています。
ここの高さ!
ここの高さ!
ここの高さ!
つまり、
ここの高さ!
ててーん!
こう!
落ちたけど、落ちてない!
ここまでくればあとはそれをプログラムにするだけ!
プログラムにするために何が必要が整理してみましょう。
必要なのは、登場人物をプログラム上で区別する方法!
地面君と主人公君が当たった時だけ
主人公君がめり込んだ分だけ上に上がればいいわけです。
HitTest() の lhs や rhs には、 type というのがあります。
lhs.type が
consts.CollitionGroup.Player
consts.CollitionGroup.Ground
だった場合だけ
特別な処理を書けば良い、ということです。
区別するには。
ここから先はもう少しだけ自分で頑張ってみましょう。
上手く出来たかどうかは、プログラムが教えてくれます。
プログラムは思った通りには動かない、
書いてある通りにだけ動きます!
じゃあ最后にジャンプさせてみましょう。
↑ でジャンプするのが自然な気がするので
今回はそこをハックしてジャンプさせてみましょう。
ハックというのは、プログラムを解析して
自分の思い通りに動かすことを言います。
ハッキングの語源!
でも悪いことをするのはクラッキングと言います。
↑ を押した時に普通に player.y に数字を足すとどうです?
じゃあどうするとよいと思います?
ここで物理ですよ!
どういう感じになっていると
実際ジャンプしたっぽい?
実は、人がジャンプして落下するのも、
投げられた物が辿る軌跡は同じ!
物が放られた時にたどる線
放物線の話です。
放物線って?
画像をググってみよう!
方程式
y = - x?
…でもこのままではゲームには使えない感じです
実际リアルな世界では何が起きているのか!!!
http://www.mech.cst.nihon-u.ac.jp/studies/okano/studies/phys/buturi1.3.html
v0 : 初速度
g : 重力加速度
θ : 打出し角度
これだけあればもう充分ですね!
なんてことは无い!!!
あんなペラ1枚で何とかなるんだったら俺はいらないです!
… でも、本物のゲームプログラマって
ああいうのが理解出来ないといけないんですよ。
ゲームのプログラムというのは
科学技術の中でも最先端の技術が使われています。
物理現象もリアルな映像の制作方法も
コンピュータに関する深い知識も必要です。
カナダとかでは国家プロジェクトです。
…その一端でも感じてもらえたら
さて、今回の物理現象を
かいつまんでわかりやすく表現していきますよ!
今回の話は加速度と速度の話に落ち着きます。
速度はともかく、加速度ってなんでしょう?
加速度とは、速度の変化率!
次の瞬间どれくらい早くなるか、を表す数字です!
位置には影響なくて、あくまで、速度だけに影響します。
そして速度は位置の変化率です。
物の移動というのはこういう流れで起きています。
…この流れを図に表すと
加速 : 9.8
速度 : 0
加速 : 9.8
速度 : 9.8
加速 : 9.8
速度 : 19.6
加速 : 9.8
速度 : 27.4
9.8
9.8 9.8
加速ってこういうこと!
加速分だけどんどん早くなる!
t (time)
これでもうプログラムが書けますね。
player に、 acceleration (加速度) と velocity (速度) を追加しましょう。
そこで、 Update() の一番最後で
player.y += player.velocity;
player.velocity += player.acceleration;
player.acceleration += consts.gravity;
KeyDownListener() の ↑ を押されたときに
player.velocity = 100;
をしてみましょう!
さぁ、早速実験です!
一定時間が経つと突然落ちる?
それはバグですね(笑)
ではそれを修正しましょう!
ヒントは地面とぶつかった時にあります!
というところで今日の講義は終了です。
お疲れさまでした。
おまけ!
距離と速度と加速度と。
距離と速度と加速度には深い深い関係があります。
今日は「変化率」という言葉を使って説明しました。
この変化率というのを数学の言葉で表現すると、
「微分」
と言います。
位置の変化量を距離。
距離を時間で微分すると速度。
速度を時間で微分すると加速度になります。
微分積分なんて世の役に立たない、とか思ってました?
私たちは日々微分積分に囲まれています!
ホントの終わりです。
お疲れ様でした。

More Related Content

4回目物理