當前位置:首頁 » 操作系統 » 子彈演算法

子彈演算法

發布時間: 2024-09-20 08:41:55

⑴ 射擊游戲里的子彈是如何飛行的

從第一款FPS 游戲 《德軍總部3D》出現以來,這種類型的 游戲 廣受好評,創新的玩法也層出不窮,比如「吃雞」。

但是你知道 游戲 里的子彈是怎麼飛行的嗎?

早期,它和現實世界中的子彈完全不一樣,很多玩家合理地利用了這個bug,比如CS里的甩狙。

隨著PC運算能力的提高,子彈的演算法也在不斷進步,彈道的效果越來越真實。

最近一位軟體工程師Tristan Jung在 游戲 論壇上總結了FPS 游戲 的一些子彈軌跡演算法。讓我們一起來看看FPS 游戲 這二十多年來發生的變化。

早期的FPS 游戲 都採用一種「光線投射」(ray casting)的技術,用槍口發射出去的射線來確定子彈的軌跡。光線投射可以確定與光線相交的第一個對象。

在FPS里,這種演算法叫做「命中掃描」(hitscan),當你扣下扳機時,物理引擎會計算下面幾件事:

如果引擎發現你有物體擋住了子彈的路徑,就是通知系統該物體被擊中。

hitscan的核心很簡單,至於物體被子彈擊中後的下一步邏輯是什麼,可以根據 游戲 要求定義:

1、如果允許子彈穿透,那麼它將穿透路線上的所有物體;

2、消除最大的射線范圍,就可以一直發射出激光,直到命中物體為止;

3、將某些表面設置為具有反射性,可以將子彈彈開。

使用hitscan演算法,最大的好處是計算簡單快速,不需要額外的內存或處理時間即可構建新的物理對象。這也意味著在多人 游戲 時,所需的網路資源也最少。

因此,行業中的許多 游戲 都將hitscan用作射擊演算法也就不足為奇了。

不僅《德軍總部3D》和《毀滅戰士》這些經典 游戲 採用,連近年來的一些熱門 游戲 也是。比如《守望先鋒》、《使命召喚》里的一些武器即是採用hitscan演算法。

但是hitscan還是存在著一些缺陷。

首先,子彈的速度是無限的,比光速還快,瞬間到達被擊中的物體。即使你離目標很遠,只要你開槍的一瞬間,對手在準星上,就必死無疑。

其次,子彈的路徑是直線,沒有考慮風向、重力等因素,即使在建模的時候把路徑改成曲線,但是在子彈射出後也無法更改路徑。

為了讓射擊 游戲 更真實,就需要使用另一種方法。

這個演算法聽起來很花哨,其實很簡單。

武器射出的每顆子彈,都會在環境中創建一個新的物理對象,有著自己的質量、速度和引擎要計算的命中框。

由於每個彈丸都是獨立存在的,因此可以考慮風力、摩擦、重力和溫度等因素。任何作用在子彈上的力都會改變其方向。

而且在這種演算法下,子彈不會瞬間移動,還可以實現以下功能:

1、在一些 游戲 中有「子彈時間」特效;

2、如果長距離狙擊移動目標,需要提前目標的估計移動量則念;

3、實現榴彈等爆炸物的延遲爆炸。

但是在進行多人 游戲 時,伺服器將需要做更多的計算,來確保所有對象都同步,並且必須解決不同客玩家之間的差異或沖突,以免在同一台伺服器上給玩家帶來不一致的體驗。

一個方法是,在 游戲 時間之前載入對象的「池」,並在需要時「彎曲並啟用」它們。一旦撞擊到物體表面,就回收這個對象,將其保存以備後用。

這種方法將減少反復創建和銷毀對象的計算和內存成本。

至於 游戲 時間的同步,存在著多種計算方法:

1、時間是與渲染分開計算,即使存在跳幀, 游戲 也能精確地表示對象。這種方法需要計算自上次渲染之後經過的確切時間。

2、計算每一幀的時間,將物理引擎綁定到幀速率。如果禁用幀速率上限,或開始丟幀,則坦盯會看到加速或卡頓的效果。

而且,這種演算法在子彈速度足夠快時,可能會遇到對象彼此「互穿」的情況,盡管它們在引擎中從未重疊。

有沒有辦法結合了以上兩種方法的優點呢?答案是有的。

最簡單的辦法就是不同武器使用不同的引擎。

大多數FPS 游戲 引擎可以處理兩種類型的子彈模擬。這樣就可以選擇擁有各種各樣的武器。《俠盜獵車手》和《半條命》等 游戲 都具有可以支持兩種物理孫信困類型的武器。

比如《光環》中的突擊步槍使用命中掃描引擎,而刺針槍使用子彈彈道模型。

游戲 開發人員還可以混合使用兩種技術來彌補每個系統的弱點,從而提供更加逼真的體驗。

例如,要解決物體從彈道互穿的問題,可以在引擎的每個時刻上繪制子彈射線,查看射線是否會相交。

也可以混合兩種演算法以增強 游戲 的功能。

《狙擊精英》系列就是一個很好的例子。扣動扳機後,引擎將使用hitscan來確定子彈是否足夠靠近目標以觸發慢動作。如果結果為true,引擎將在子彈時間內計算彈道。

參考鏈接:https://www.gamasutra.com/blogs/TristanJung/20191206/355250/How_Do_Bullets_Work_in_Video_Games.php

⑵ 高一物理題:在一根軸上相隔S=1m安裝平行薄圓板

主要是計算角速度:每分鍾3000轉
一轉是多少?360度
所以每秒轉 360度×3000/60s=18000度/s
所以子彈在通過兩薄板之間距離1m的時間內 薄板轉過了30度
從而可以計算這段時間是多長 即 角位移除以角速度=30/18000=1/600s
然後就可以計算速度位移除以時間 得到子彈速度600m/s

p.s 題意大概是這樣:考慮復雜一點半徑夾角30度 也可能其實在子彈飛過1m的時間內
薄板已經轉了360+30 或360-30 或720+30、720-30.。。。。。。
所以題目應該說明白是什麼槍的 子彈
手槍子彈的速度就比較低,它主要供手槍和沖鋒搶使用。一般槍口初速為300M/S或更低。
步槍的速度則高些,速度為700-900M/S的樣子。
狙擊步槍和重機槍的彈丸速度則更高點在800-1000M/S的樣子
所以如果是已經轉過了一圈或者大半圈,按以上演算法 子彈速度才40m/s多點
這時候怎麼也得考慮重力產生的垂直速度了吧~~哈哈

熱點內容
無線監控怎麼存儲 發布:2024-11-24 16:46:43 瀏覽:598
英朗買什麼配置 發布:2024-11-24 16:40:44 瀏覽:346
殺戮解壓法 發布:2024-11-24 16:40:36 瀏覽:945
避孕套存儲箱 發布:2024-11-24 16:25:09 瀏覽:735
如何自己搭建雲伺服器干貨 發布:2024-11-24 16:22:08 瀏覽:371
安卓怎麼返回出廠系統 發布:2024-11-24 16:20:32 瀏覽:447
求生之路sp源碼 發布:2024-11-24 16:06:05 瀏覽:373
javaurl的正則表達式 發布:2024-11-24 15:53:45 瀏覽:246
c語言只可以執行編譯文件 發布:2024-11-24 15:53:33 瀏覽:757
126郵件伺服器地址 發布:2024-11-24 15:52:46 瀏覽:215