【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 【作れば?】
>の三つ。
すまん、正しくは四つ(X Y vx vy)だな…_| ̄|○
うわぁ、また間違えてた。
X’ := X + vx*Δt
Y’ := Y + vy*Δt - 1/2*g*Δt*(Δt+2t)
t はジャンプ開始からの総フレーム数。Δt は1フレーム。
多分これでそれっぽくジャンプしてくれる。
しまった・・・ジャンプ開始からの総時間 t 使うんだったら
X’ := X + vx*t
Y’ := Y + vy*t - (1/2)*g*t^2
X,Y : ジャンプ開始時のキャラ座標
でいいじゃないか。何やってんだか・・・_| ̄|○
955 :
752:04/10/09 20:10:42 ID:tGkVnHq2
うおおー みなさんありがとうございますーー
わざわざサンプルまで作ってもらっちゃって…orz
今からがんばって作ります。バイトで疲れて寝ちまってたぃ。
個別レスはまた後でします。みんなほんとうにありがとう。
956 :
752:04/10/09 20:56:28 ID:tGkVnHq2
>>954 vxとvyは、目標地点との位置を計算して割り出せばいいのん?
>>950みたいなコトすりゃいいのかな。
うえー、わかんねー。
>>949のテーブルも面白いな。最終奥義っぽい気もするけどw
ジャンプじゃなくて、他のモーション作る時に使いそう。
ツクールでいうトコの戦闘アニメ作るときに。
>951-954で書いたのはアクションゲーム的手法なので vx と vy は適当に設定すればいい。
RPGの演出に使うなら、テーブルの方が手っ取り早いかもしれない。
とはいえ、せっかくなので vx と vy の出し方も書いておこう。
以下ではジャンプして、同じ平面上に着地する場合を想定して書く (飛び乗ったり飛び降りたりしないってこと)。
まず決めておかなければならないのは、着地点のジャンプ開始点からの水平距離(相対座標)
それから、ジャンプしている時間。
ここでは水平距離をΔx、ジャンプしている時間を Jt としよう。
vx は 等速直線運動なので簡単に
vx := Δx / Jt
でOK。
でvyはというと、着地点までのちょうど半分のところで最高点に達する=速度v=0 になるようにすればいい。
鉛直投げ上げ運動の速度の式は重力加速度を g 、時間を t とすると
v = vy - g*t
最高点に達する時間は Jt/2 なので
0 = vy - g*(Jt/2)
よって
vy := g*(Jt/2)
となる。
958 :
752:04/10/09 23:23:26 ID:tGkVnHq2
>>957 詳しくありあとうございます!
とりあえずその式を理解するには鉛直投げ上げ運動とやらを学ぶ必要がありそうだ。
色々調べてるけどちんぷんかんぷんだぎゃ…
vyが高さで、現在時間<JT / 2の時はマイナスで、現在時間>JT / 2がプラスで… ありゃ?
…まあ、とっかかりが出来たから、なんとかやってけそう。がんばれ俺。
本当にわざわざありがとう>みんな
俺の半分はみんなでクリエイトされてる
テーブルの値はこっちの方が自然かも。
Y := X * X から差をとって2フレームに1回動くようにしたものです。
JumpLine: array[0..42] of Integer =
(-19,0,-17,0,-15,0,-13,0,-11,0,-9,0,-7,0,-5,0,-3,0,-2,0,
-1,0,1,0,2,0,3,0,5,0,7,0,9,0,11,0,13,0,15,0,17,0,19);
960 :
752:04/10/10 00:33:00 ID:pz2k/KeD
ちょこっとづつだけど、鉛直投げ上げがわかってきた。まだ穴あるけど。
>>959 コイツをJumpIndexで拾って、Yに足せばいいんだよね。
for文でテーブル生成するようにすれば、初期値と着地点のセットも楽そうだし。
ぶっちゃけコッチの方が簡単そうだーorz
せっかく教えてもらったんだし、ノウハウ獲得のためにもう少し鉛直投げ上げ勉強しよう。
マウスを動かして、フレーム毎のカーソル位置の変位を求めて
テーブルを作ると良いかもしれない。
>vyが高さで
ちがう。vy は初速度。
964 :
752:04/10/10 14:37:13 ID:4+SGGvxt
>>961 ツクールで戦闘アニメ作るとき、それと同じだね。
カーソル位置じゃなくてグラフィックの位置だけど。
簡単に作れるけど、決まった動きしか出来ないのが難点。
>>962 ゴメンナサイ… 今教科書とか講座サイト見て必死にがんばってます。
難しいけど少しずつ公式とか当てはめて理解しようとしとるます。
>>963 テーブル式だとアクション系は難しいのね…
>>957を参考にして、Y軸変化に初期位置と着地地点の差分を時間で割ったのを足してみた。
とりあえず同じ平面上に着地しなくても止まるようになった。
多少のズレはあるけんど。
もう少し初速度の求め方と時間の求め方を勉強しないといかんデス。。。
次スレは990あたりでいいよね
965 :
752:04/10/10 14:48:02 ID:4+SGGvxt
初期座標を(0,0) 重力加速度 g を約10として
横方向に100pixel の距離を 10フレームかけて移動するジャンプを考える。
初速度は>957に書いてある式から
vx = 100 / 10 = 10
vy = 10*(10/2) = 50
これを>954の式に当てはめると、ジャンプ開始から t フレーム後の座標(X’ Y’)は
X’ := 0 + 10*t
Y’ := 0 + 50*t - (1/2)*10*t^2
これを t を変えて手計算してみるとそれっぽい軌道になっているはず。
着地する場合は、着地点の Y 座標と Y’ が一致(またはY’がYよりめり込んだ位置)に
なったときに計算を止める。そうしないとどこまでも落ちていく。
着地点の X 座標は最初の計算で指定したもの(上の例なら100)より、
飛び乗りなら手前に、飛び降りなら先になる。
おっと>968は>752宛ね
970 :
752:04/10/11 08:58:23 ID:1NvYAQdE
もぅ何がなんだか○| ̄|_
>>966 >>968 毎度毎度、ありがたいです。
かなり解りやすく書いてくれてるんだろうケド、まだイマイチわからん…
頭痛くなってきた。ていうか小学生からやり直したほうがいいかも('A`)
971 :
名前は開発中のものです。:04/10/11 13:17:05 ID:SwVJig7g
質問があるんですけど、QuadrupleDでフェードインやアウトなどは、どのように書けばなりますか?
>>971 もし自分がその質問を受けたら、あなたは答えられますか?
投稿する前に、自分の書いた文章を2、3回読みなおすことをお勧めします。
QuadrupleDに限らず、現在の画像と次に表示したい画像を、徐々に比率を変えながら混ぜて表示すればいい。
>>971 ようは徐々に現れるようにすればいいと思う。アウトはその逆。
975 :
967:04/10/12 05:23:51 ID:i5/KZM7k
LoopLandの方は浮動小数点を使って少しずつ動かし、
矩形が障害物と重なると止まるようになってるみたい。
整数型で画面幅を640×100で処理、
その値を100で割った値に描画としています。
未だに浮動小数点を使うのは邪道な気がして…
0.3移動する場合、小数点以下切り捨てだと、
0.3 + 0.3 + 0.3 + 0.3 = 1.2 で、4フレームで1ピクセル移動する
しかし、次は 1.2 + 0.3 + 0.3 + 0.3 = 1.1 で、3フレームで移動する。
この変は気にならないのか、それとも何か手があるのか。
979 :
名前は開発中のものです。:04/10/13 11:27:48 ID:T4B/tejA
これってdelphiXみたいなものですか?
>>980 ClootieはDirectX APIやライブラリを使えるようにしたものです。
DelphiでAPIを使うにはヘッダが必要なのですがDirectXのヘッダと
定数などの定義やD3DXライブラリなどの移植も含めたパッケージです。
(win32APIのヘッダはDelphiにはじめから入ってます)
簡単にいうとDirectX SDKの移植ですね。
DelphiではDelphiXやQuadrupleD、C++はLunaやDXライブラリが有名だけどこれらは
DirectX APIを使いやすいようにしたラッパーライブラリといわれるものです。
煽るわけではないのだが、
DelphiでDirextXを使う意義とは…教えてくれよっ!
俺はそのままDirctXを使えると思って
Delphi買ったのだが・・・
DirectXなら垂直同期をとってちらつきを無くす事が出来るらしい。
あと、リセット無しで解像度と色深度を変えられる。
ジャンプだけど、
最高でどれだけの高さまでジャンプしたいか、
着地するまでにどれだけの距離を飛びたいか、
を考えてから、式やテーブルを考えないと駄目みたい。
320x240だと横方向へは1ピクセル/フレームで動かせばいいのかな。
2ピクセル/フレームだと速すぎるし。
>>982 コンポが使える。DirectX使うツール作りに大変便利。
次スレいらねえな
990 :
989:04/10/15 06:26:11 ID:wcOjDqKn
あー、これは斜め下へ移動して横のブロックに衝突する場合、
横方向のみピタリとずらしていて、縦方向にはずらしていないんですね。
私は縦へもずらしていました。
見た目は変わらないし、細かい事を気にしない方が良さそう。
しかも、今重なっていて、次の瞬間も重なる場合にブロックの外へずらしている。
だから、見た目では多少重なるんですよね。
私のやり方は、今重なっておらず、次の瞬間に重なる場合は
ブロックの隣へピタリと止める方法でした。
埋め
埋め
埋め
埋め
埋め
埋め
埋め
埋め
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。