當前位置:
首頁 > 最新 > 任鳥飛談逆向-RPG遊戲自動打怪之朝向判斷

任鳥飛談逆向-RPG遊戲自動打怪之朝向判斷

RPG遊戲輔助想要做到自動打怪

獲得到最近怪物信息以後 還需要面向怪物

否則背對怪物等等情況是沒有辦法攻擊以及釋放技能的

遊戲設計的時候朝向是有很多種情況的

第一種

2D,2.5D老遊戲,例如傳奇

他的朝向一般是極為固定的4朝向或則8朝向

也就是不是自由朝向的,只能朝向 東南西北4個方位

或則 東 東北 北 西北 西 西南 南 東南 8個方位

那麼朝向計算也極為簡單

只要計算出怪物和人物坐標的關係即可

例如

X怪物>X人物 && Y怪物>Y人物

那麼想面向怪物就把朝向值修改成面向東北方即可

一般 8個方位是0-7 8個數值表示

第二種

2D版自由朝向

說是2D版自由朝向,但實際上很多3D遊戲都在運用

非常簡單的理解就是遊戲是3D的,但是人物轉向只能2D平面轉向,而頭不可以上抬和俯瞰的

例如QQ西遊

一般情況這種遊戲的朝向值得是從0到一個數值均勻排列在坐標繫上

我們只要計算出他的變化規律 即可輕鬆計算

例如QQ西遊是從 X正軸為0 逆時針不斷增加

一直增加到256然後和X軸重疊又變為0

那麼知道了 其變化規律 我們就可以代碼實現

如下

DWORD Call_朝向怪物角度(FLOAT x,FLOAT y)

{

T人物屬性 A;

A.c初始化();

FLOAT X=A.fX;

FLOAT Y=A.fY;

DWORD B=0;

if (x>X&&y>Y)//第一象限

{

B=(DWORD)(atan2(y-Y,x-X)/3.1415926 *180);//真實角度

B=B*64/90 ;//同比例遊戲角度

B=0+B;

}

if (xY)//第二象限

{

B=(DWORD)(atan2(y-Y,X-x)/3.1415926 *180);

B=B*64/90 ;

B=128-B;

}

if (x

{

B=(DWORD)(atan2(Y-y,X-x)/3.1415926 *180);

B=B*64/90;

B=128+B;

}

if (x>X&&y

{

B=(DWORD)(atan2(Y-y,x-X)/3.1415926 *180);

B=B*64/90;

B=256-B;

}

return B;

}

第三種

通過第一種和第二種

我們可以明顯感覺到從8方位到多方位的升級

但是這還是不夠的 無論你把坐標系分成多少份 還是不是絕對的自由

那怎麼辦呢?

遊戲發明出更自由的朝向方式

例如 天涯明月刀

他是這樣的設計理念

以人物為中心 花一個圓,一般半徑為1(是多少無所謂,我們乘多少即可)

和怪物連線,於圓的交點就是我們的朝向

那麼這樣就變成了自由朝向了,想精確到多少都可以

計算起來也非常簡單

以人物原點,圓交點,圓交點到X軸的垂線和X軸的交點 三點為一個三角形

人物原點,怪物坐標點,怪物坐標點到X軸的垂線和X軸的交點 三點為一個三角形

2個三角形為相似三角形

那麼 小三角形h / 1 = (Y怪物-Y人物)/距離

小三角形l / 1 = (X怪物-X人物)/距離

得到的 h 和l 就是我們 圓交點的坐標了

還有進一步的升華的方式

就是3D版本的朝向

那麼他將不再是一個圈了

是一個3D立體的球

但是演算法依然沒有變化

只是距離發生了變化

相似三角形依然還是相似三角形

h=(Y怪物-Y人物)/距離

l=(X怪物-X人物)/距離

z=(Z怪物-Z人物)/距離

其中距離=sqrt((人物.fX-fX)*(人物.fX-.fX)+(人物.fY-fY)*(人物.fY-fY)+(人物.fZ-fZ)*(人物.fZ-fZ));

第四種

一般是FPS類遊戲喜歡用的

也和太空梭等用的角度一樣

就是俯衝角 搖擺角 和旋轉角

其中旋轉角代表著自身的旋轉 ,在遊戲里幾乎無用

那麼就是俯衝角 代表著槍支方向和水平面上下的角度

搖擺角 代表槍支方向和中線左右搖擺的角度

計算方法 參考第二種的反正切方式即可


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 任鳥飛逆向 的精彩文章:

TAG:任鳥飛逆向 |