詳細講解如何實現FPS跳躍控制

跳躍在第一人稱射擊遊戲中是很重要的動作。在Quake中很多技巧都是通過jump來完成的。那麽跳躍是如何實現的呢?

其實只要明白跳躍的原理,控制起來就是花點腦經的問題。Jump說白了,就是眼睛(或者說Camera)所在位置的升高和回落。

這裏我們設置三個變量

D3DXVECTOR3

VDot,VAtPoint,VUp;

VDot 代表眼睛(Camera)所在位置的點。

我們所要做的,就是在跳躍的時候,在VDot上加上jump的步長:

D3DXVECTOR3 NorVUp;

D3DXVec3Normalize(&NorVUp, &VUp);

VDot += jumpskip[i]*NorVUp;

VAtPoint += jumpskip[i]*NorVUp;

因爲VUp總是向上的,可以簡化爲

VDot.y += jumpskip[i];

VAtPoint += jumpskip[i];

jump的步長可以是一個數組,值爲每幀上升和落下的距離段。爲了模擬真實的物理效果,這組應該根據牛頓力學重力加速度公式來計算:例如我們定義

float jumpskip[20] = { 0.95, 0.85, 0.75, 0.65, 0.55, 0.45, 0.35, 0.25, 0.15, 0.05,

-0.05, -0.15, -0.25, -0.35, -0.45, -0.55, -0.65, -0.75, -0.85, -0.95, };

下面是控制簡單跳躍的代碼片段:

相關變量有:

bool jumpping;

int jumpint;

int delay ;

這段代碼加在每Frame都變化的邏輯裏:

//D3DXVECTOR3 NorVUp;

//D3DXVec3Normalize(&NorVUp, &VUp);

if (jumpping)

{

delay ++;

if (delay == 5)

{

delay = 0;

VDot += jumpskip[i]*NorVUp;

VDot.y += jumpskip[jumpint];

VAtPoint += jumpskip[jumpint++];

if (jumpint == 20)

{

jumpint = 0;

jumpping = false;

}

SetView();

}

}

下面的代碼加在鍵盤控制代碼裏面:

case VK_SPACE:

if (jumpping == true)

break;

else

jumpping = true;

break;

這裏說的是簡單的jump控制,在遊戲中,根據需要,可能會更加複雜。

 
詳細講解基于J2EE實現Web方式軟交換配置
基于J2EE實現Web方式軟交換配置 1.軟交換技術簡介 軟交換技術采用分層的網絡架構,把傳統電路交換機的呼叫控制功能從媒體網關中分離出來,通過軟件實現連接控制、呼叫進程選擇、呼叫選路等呼叫控制功能。軟交換一...查看完整版>>詳細講解基于J2EE實現Web方式軟交換配置
 
實例詳細講解如何使用好鋼筆工具-Photoshop
實例詳細講解如何使用好鋼筆工具-Photoshop
    1、在photoshop中打開圖片重設你想要的大小。我將大小重新調整爲1800px*2546px。   我將企鵝圖像的透明度降到50%這樣你可以更加容易看到你創建的路徑和曲線。爲了做到這一點,只需要簡單的複制圖層刪除原始...查看完整版>>實例詳細講解如何使用好鋼筆工具-Photoshop
 
詳細講解如何謹慎架設DNS服務器
  由于企業辦公需要,筆者在局域網內部署了DNS服務器,所有客戶機上的DNS服務器地址參數都設置爲該服務器的IP地址。並且還在DNS服務器中新建了一個名爲“rtj.net”的域,供企業員工訪問內部網站需要。    但經...查看完整版>>詳細講解如何謹慎架設DNS服務器
 
詳細講解如何更新路由表
  R I P爲每個目的地只記錄一條路由的事實要求R I P積極地維護路由表的完整性。通過要求所有活躍的R I P路由器在固定時間間隔廣播其路由表內容至相鄰的R I P路由器來做到這一點,所有收到的更新自動代替已經存儲在...查看完整版>>詳細講解如何更新路由表
 
詳細講解如何進行DNS故障排除
  問題真的出在 DNS 上嗎?  在開始討論如何排除 DNS 問題之前,我們想知道您是否清楚怎樣判斷某個問題是由 DNS 而不是由別的命名服務造成的。在 Windows 主機上,判斷問題的原因是否真的出在 DNS 上可是件困難的...查看完整版>>詳細講解如何進行DNS故障排除