top page



プロフィール

Yo./Namikaze Project

Namikaze Projectの萌え系プログラマ。ご意見などありましたら、記事にコメントあるいは、twitter(@yo_namikaze)、メール(yo@namikaze.org)にお願い致します。


開発環境など

C++, Blender, Unity, DirectX, Windows7

カレンダー

<   2015年1月   >
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

旧ブログへのリンク

Yo.'s Game Development Diary

購読(RSS)

Powered by Movable Type 5.2.9

[Idinaloq] 進捗 2015/01/25

| コメント(0) | トラックバック(0)

突然ですが、本日、モデリング&3Dムービー担当だったjpsさんから、うれしい情報がありました。ムービーの .lwo .lws、非圧縮のレンダリング済み .avi (640x480)が15年の時を経て発掘されました。これは...再レンダリングも可能ですね(にやり) 。一方、これはかれこれ1ヶ月前の情報ですが、小田せんせの2Dパートのオリジナルビットマップは失われていました(残念)

さて、本題。自機の移動を細かく実装していました。

通常、入力を得て、左右キー(PAD)ならばX座標を一定値変更、上下キーならばZ座標を一定値変更します。
サンプルプログラム等で、自機の速度の分、X座標、Z座標を変更するものをよく見かけます。(さらにフレームレートの考慮が無いものもあります) それらはそもそもサンプルなのでよいのですが、実際に遊んでみると、サンプルの実装では処理が不足していることに気づきます。
移動速度の設定が十分に遅い場合には問題は起きませんが、比較的速い速度を設定した場合、そのままでは敵の弾幕を回避するのが難しくなります。

自機の速度が例えば毎フレーム、比較的速い、ある一定量(ACC) 移動すると設定しているとします。フレームレートを考慮した移動量補正値をdeltaとします。イディナロークでは、60fpsを基準(delta = 1.f)として調整しています。移動、ビジュアルのタイミングなど、必ずこの delta を掛けてあげる必要がありますが、以降の話では省略して説明します。

先ほどのACCは、連続的に移動する場合には気になりませんが、旧イディナロークは、機体別に設定された固定的な移動量で移動しているので、敵の弾を避ける場合に、細かく避けることが出来ず、大雑把な回避しかできませんでした。今回は、ここを改善、パッド操作を細かく行うと細かく移動することを可能にして操作性を向上させようと思います。

実装方法は色々あるとは思いますが、自機の初期の移動量を細かい移動量に設定し、パッドを連続して押下するとぐっと移動量が増加(もたつきを感じない程度に増加)し、パッドを一瞬でも離すと移動量が初期値(細かい移動量)に戻るようにしました。押下が継続している間は移動量を増加させることで、押してから離した時間を移動量に還元できるようになり、細かい移動も、移動量を調整できるようになりました。これにより、細かいパッドさばきが可能になっていると思います。

また、クラスの整理は継続的に実施中です。今回は、入力を行うラッパクラスを作成しました。このクラスを使用すると、利用側がダウントリガで入力チェックすることを意識せず、こんな感じで、Unityぽく入力判定できるようになります。UnityのGetButtonDown等のパラメータは文字列ですけれどね。ちなみに何も考えずにキー入力にも対応。

if (g_Input.GetButton(kInputStateLeft) ==true) {
left = true;
}
else if (g_Input.GetButton(kInputStateRight) ==true) {
right = true;
}
if (g_Input.GetButton(kInputStateDown) ==true) {
dw = true;
}
else if (g_Input.GetButton(kInputStateUp) ==true) {
up = true;
}
if (g_Input.GetButtonDown(kInputState4) ==true) { // A
SetCameraMode(kiCameraModeNormal);
}
else if (g_Input.GetButtonDown(kInputState5) ==true) { // S
SetCameraMode(kiCameraModeSide);
}
else if (g_Input.GetButtonDown(kInputState6) ==true) { // D
SetCameraMode(kiCameraModeBack);
}

また、旧イディナロークは、斜め移動が高速になるようにしていますが、これは意図的にやっていました。 たしかレイストームも斜めが速かったと記憶しています。今回はあえて、上下左右斜め一定にしました。

以下は、前述の細かい移動を出来るようにしたムービーになります。

今回はこの辺で。

ではでは。



トラックバック(0)

トラックバックURL: http://www.namikaze.org/mt/mt-tb.cgi/16

コメントする

Yo Namikaze Channel

アフィリエイト

Twitter