【Terraria機制】傳送槍子彈的射速
今天電路群內(nèi)在討論傳送槍子彈的射速。很久以前白霜心做過測試,每秒348格。最近我做過的測試顯示第一幀5格。顯然傳送槍子彈每幀前進的距離是小數(shù)格,所以348這個數(shù)據(jù)也不一定準(zhǔn)。通過查看源碼,連蒙帶猜,大致搞清楚了傳送槍子彈的精確射速。
結(jié)論:傳送槍子彈射速是93像素/幀

首先是實驗值。348格折合348*16=5568像素。5568附近的5580是60的倍數(shù),因此猜測子彈實際前進了5580像素,速度折合93像素/幀。

然后是源碼查詢過程。
在 ItemID.cs 里查找“portal”可以找到傳送槍的id是3384。

在 Item.cs 里查找“3384”可以找到傳送槍的屬性,可以看到傳送槍子彈的id是600。

在 Projectile.cs 里查找“600”可以查到傳送槍子彈生成過程,通過38282、38283、38285、38288行可以知道傳送槍子彈的id是601,射速是3。

在 Projectile.cs 里查找“601”可以看到傳送槍子彈的屬性。其中有一個“extraUpdates”屬性比較特殊,大多數(shù)射彈都沒有。同時可以看到子彈的碰撞箱是10*10。

在 Projectile.cs 里查找“update”可以看到關(guān)鍵的刷新函數(shù)(射彈刷新的基本概念可以參考CV1815655)

可以看出來,每幀中一個射彈刷新次數(shù)是 extraUpdates+1,所以傳送槍子彈每幀刷新31次,每次前進3像素,每幀總共前進93像素,與實驗值吻合。游戲設(shè)置額外刷新次數(shù)是為了避免射彈速度過快錯過關(guān)鍵的碰撞。93這個奇怪的數(shù)值來源于射彈速度3和額外刷新次數(shù)30兩個設(shè)定,可能沒有實際的原因,只是程序員隨便搞的。