游戲開發中的插補
- 插補
- 變換插值
- 平滑運動
插補
插值是圖形編程中非常基本的操作,熟悉它是很好的,以擴大您作為圖形開發人員的視野,
基本思想是要從A過渡到B,A值t表示中間的狀態,
例如,如果t為0,則狀態為A,如果t為1,則狀態為B,介于兩者之間的是插值,
在兩個實數(浮點數)之間,通常將簡單插值描述為:
interpolation = A * (1 - t) + B * t
通常簡化為:
interpolation = A + (B - A) * t
這種插值的名稱是“線性的”,它以恒定速度將一個值轉換為另一個值,因此,當您了解線性插值法時,您會知道他們是在指這個簡單的公式,
還有其他型別的插值,此處將不介紹,推薦的后續內容是Bezier頁面,
向量插值
向量型別(Vector2和Vector3)也可以插值,它們帶有方便的函式來實作 Vector2.linear_interpolate()和Vector3.linear_interpolate(),
對于三次插值,還有Vector2.cubic_interpolate()和Vector3.cubic_interpolate(),它們執行Bezier樣式插值,
這是使用插值從A點到B點的簡單偽代碼:
func _physics_process(delta):
t += delta * 0.4
$Sprite.position = $A.position.linear_interpolate($B.position, t)
它將產生以下運動:

變換插值
也可以插值整個變換(確保它們具有統一的比例尺,或者至少具有相同的非統一比例尺),為此,可以使用函式Transform.interpolate_with(),
這是將猴子從Position1轉換為Position2的示例:

使用以下偽代碼:
var t = 0.0
func _physics_process(delta):
t += delta
$Monkey.transform = $Position1.transform.interpolate_with($Position2.transform, t)
再次,它將產生以下運動:

平滑運動
可以使用插值來平滑移動,旋轉等,這是滑鼠使用平滑運動跟隨圓的示例:
const FOLLOW_SPEED = 4.0
func _physics_process(delta):
var mouse_pos = get_local_mouse_position()
$Sprite.position = $Sprite.position.linear_interpolate(mouse_pos, delta * FOLLOW_SPEED)
外觀如下:

這對于使攝像機移動,跟隨您的盟友(確保它們保持在一定范圍內)以及許多其他常見的游戲模式非常有用,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/234962.html
標籤:其他
上一篇:2020ICPC(上海) - Sum of Log(數位dp)
下一篇:c語言小游戲之一看就會的推箱子
