×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

〜物体の移動〜



ダメージ床の設定や、ステージオブジェクトの設定の際に、
しばしばベクトルという言葉が使われます。
ここではそれらの意味と、自然に動かすためにはどういう設定をすれば良いか、
などを解説していきたいと思います。


■ベクトルとは?
ベクトルとは、要するに矢印のことです。
しかし、矢印一つで位置、方向、量の3つのパラメータを表すことができます。
たかが矢印、されど矢印なのです。
ベクトルはとても便利

ベクトルを使うと、動いている物の速度など、目に見えないものの状態を
視覚的に表すことができるようになります。

熱っ血では、速度や加速度の方向や量などを一まとめにしてベクトルと呼んでいます。


■速度について
物が動くという事は、すなわち速度を持っているということです。
速度とは、言い換えれば単位時間当たりに進む距離となります。

小学校か中学校辺りで、下のような図を見たことがあると思います。
はやさ、じかん、きょりの関係です
「きはじ」とか「はじき」とか呼ばれるこの図ですが、
はやさ、じかん、きょりの関係を模式的に表したものです。

速さ×時間=距離です。


■加速度について
上の「きはじ」の関係はそれほど難しくないのですが、自然界ではこの式で表せる運動は少ないです。
車は走り出した瞬間に時速100キロは出ませんし、転がしたボールはだんだんゆっくりになり、
最終的には止まります。

それはなぜかというと、自然界では常に何かしらのがかかっているからです。
そして、力がかかる物には必ず加速度が発生します。

加速度とは、単位時間当たりに増加する速度の事です。
上の「きはじ」的な図で表すと下のようになります。
かそくど、じかん、はやさの関係です
この図は私が作ったものですが、要するに加速度×時間=速さです。

この加速度を使うことで、徐々に加速していく車や、徐々に減速していくボールや、
ジャンプするキャラなどを自然に動作させることができます。
逆に言うと、自然界の法則に則っていない運動は、ゲームの中であっても不自然に見えるものです。

熱っ血では、これら速度、加速度、時間、距離の4つのパラメータを制御して、
キャラクターやオブジェクトを動かしていくことになります。


■各種数値の単位について
これは長さが10で、重さが5です。
と言われても、10センチなのか10メートルなのか、5キロなのか5グラムなのか分かりません。

数字は単位があって初めて意味を持ちます。
ということで、上記の4つのパラメータについて、熱っ血におけるそれぞれの単位を明確にしていきます。

1)距離
距離の単位は、ドットです。
説明するまでも無いと思いますが、ドットとは点のことです。

これを期にwikipediaで調べてみたのですが、
この場合ピクセルと呼んだ方が正しいような感じです…
まぁ、今更直すのも面倒なのでこのサイトではドットで統一することにします。
そして、単位として表記する時は[dot]と表示することにします。
その方が紛らわしくないと思いますので。

2)時間
時間の単位はフレームです。
厳密に言うとフレームは時間の単位ではないのですが、他に良い表現が見つからないので、
このサイトではこれを時間の単位として呼ぶことにします。
詳しくはwikipediaを参照して下さい。

本来フレームとは、ある瞬間の静止画面の事を指します(タブン)。
動画というのは、フレームを連続的に表示することで、絵が動いているように見せています。

熱っ血では、1秒間に60フレームを表示させることで、時間が進行しています。
俗に言う60fpsというやつです。
なので1フレームは1/60秒、つまり0.0166…秒です。
要するにこれが熱っ血における時間の最小単位となりますので、
これを便宜的にフレームと呼び、時間の単位として取り扱うことにします。

ということで、時間は[frame]という単位で進行します。

3)速度
普通、速度と言えばメートル毎秒や時速などを言いますが、
熱っ血では距離は[dot]、時間は[frame]と定義しましたので、ドット毎フレームとなります。
これを単位として表すならば[dot/frame]、または[d/f]、またはdot per frameから[dpf]
などと表現できます。

なんか見た目イイ感じなので、このサイトでは[dpf]を速度の単位として採用することにします。
ということで、[dpf]は1フレームで進むドット数を表します。

一つ注意しなければならないのは、オブジェクトの動きを設定する際や、
ステージの仕掛けで吹き飛ぶ速さなどを設定する際に取り扱う速度の数値は、%表示だということです。
つまり、速度で指定した数値の1/100のドット数だけ移動します。
これは、設定する数値に小数点が使えないためです。
ですので、100[dpf]で1フレーム1ドット、500[dpf]で1フレーム5ドット進むことになります。
また、50[dpf]で2フレーム1ドット、10[dpf]で10フレーム1ドット進む速度ということです。

移動距離の計算例は下の図のようになります。
距離を計算する時は100で割るのをお忘れなく

ここで、速度をV[dpf]、時間をT[frame]、移動距離をX[dot]とすると、
移動距離の式です
となります。

4)加速度
前述の通り、速さ×時間=距離加速度×時間=速さですので、これを色々とこねくり回すと、
加速度の単位はメートル毎秒毎秒[m/s2]となります。
これを熱っ血に置き換えると、ドット毎フレームフレーム[d/f2]となります。

いまいちピンと来ないかもしれませんが、[dpf/f]と表すと
1フレーム毎に増加する速度ということがイメージしやすいと思います。
分かりやすいのでこのまま[dpf/f]を加速度の単位として採用します。

例えば、あるオブジェクトに10[dpf/f]の加速度を与えた場合、10フレーム後には100[dpf]、
60フレーム後、つまり1秒後には600[dpf]相当の速度を持つ事になります。

キャラが加速する様子を図で表すと下のようになります。
移動距離は…?

ここで、加速度をA[dpf/f]、時間をT[frame]、速度をV[dpf]とすると、
距離と速度の関係に似ています
となります。
速度の計算は簡単ですが、この場合の移動距離の計算は若干めんどくさいです。

めんどくさい説明を省くと、移動距離X[dot]は下の式で計算することができます。
加速度が一定の場合の式です
ただし、この式は加速度が一定の場合にしか使えないことに注意して下さい。

上の図のように、加速度10[dpf/f]で60[frame]走った場合、移動距離X[dot]は下のように計算できます。
X=10×60×60÷2÷100=180[dot]


上の式は、初速度が0の場合の式ですので、ある速度を持った状態からスタートした場合は、
(3)で示した式と上の式を単純に足せばいいです。

つまり、初速度をV0[dpf]とすると、
初速がある場合はこうなります
となります。

例えば、速度600[dpf]で走っている時に、-20[dpf/f]のマイナスの加速度を受けながら
止まるまでに滑る距離を計算する場合、まずは止まるまでの時間を計算します。

V=ATの式を使うと、速度が0になるのにかかる時間は、
0=600-20T より T=30[frame]
この間に滑る距離は、
X=(600×30-20×30×30÷2)÷100=90[dot]
となります。


加速度は、速度以上に目に見え難いパラメータですが、与える時間によって結果が
大きく変わりますので、設定する際は注意が必要です。
しかしながら、この加速度を使いこなせれば、オブジェクトなどを自由自在に動かすことができるようになります。



・・・つまらない話はたぶんまだ続きます。