Lerp
Örnek
Animasyonlar için basit Lerp kullanım örneği.
-- Zamanlı animasyonlar yapmak için "Lerp" fonksiyonunu kullanmak istiyorsanız,
-- animasyonun başlangıç zamanını saklamak için bir değişken gereklidir.
local animation_start, animation_duration = CurTime(), 2
hook.Add( "HUDPaint", "LerpAnimation", function()
local animation_progress = ( CurTime() - animation_start ) / animation_duration
-- "Lerp" fonksiyonu daha sonra ilk argüman olarak oran kullanılarak çağrılır.
-- İkinci argüman, oran "0" olduğunda başlamak istediğiniz değer ("from") ve
-- üçüncü argüman, oran "1" olduğunda ulaşılacak son değerdir ("to").
-- Eğer "from" değeri "0" olacaksa, "to * animation_progress" formülünü kullanmayı düşünebilirsiniz.
-- Eğer "to" değeri "0" ise, "from * ( 1 - animation_progress )" formülünü kullanabilirsiniz.
-- Bu yöntemler biraz daha hızlıdır ve "Lerp" kullanmışsınız gibi aynı sonucu verir.
-- Örneğin bu satırı yazmanın farklı bir yolu şöyle olurdu:
-- "local animated_value = 255 * ( 1 - animated_progress )"
-- Animasyonu tersine çevirmek isteseydiniz, satır şöyle olabilirdi:
-- "local animated_value = Lerp( animation_progress, 0, 255 )"
-- ya da
-- "local animated_value = 255 * animation_progress"
local animated_value = Lerp( animation_progress, 255, 0 )
-- Bu durumda "Lerp" fonksiyonu, bir dörtgenin yavaşça kaybolmasını sağlamak için kullanılıyor.
surface.SetDrawColor( 255, 255, 255, animated_value )
surface.DrawRect( 50, 50, 300, 300 )
-- Başlangıç zamanını ve süreyi toplarsanız toplam animasyon süresini elde edersiniz,
-- ve bunu mevcut zamanla karşılaştırırsanız animasyonun tamamlanıp tamamlanmadığını
-- kontrol edebilirsiniz.
-- Animasyonun tamamlanıp tamamlanmadığını kontrol etmenin biraz daha doğru ve optimize edilmiş bir yolu,
-- "animation_progress" değerinin "1"e eşit olup olmadığını veya "animated_value"nun "Lerp" çağrıldığında
-- kullanılan üçüncü argümana eşit olup olmadığını kontrol etmektir.
if ( animation_start + animation_duration <= CurTime() ) then
-- Bu örnekte, animasyon tamamlandığında başlangıç zamanını sıfırlıyoruz.
animation_start = CurTime()
end
end )
Örnek
Gelişmiş Lerp animasyon örneği: Önceki değerden yeni can değerine ulaşmak için can değişimini 0.5 saniye boyunca yumuşatacak bir can barı.
local start, oldhp, newhp = 0, -1, -1
local barW = 200
local animationTime = 0.5 -- saniye
hook.Add( "HUDPaint", "LerpAnimation", function()
-- Yerel oyuncu hala yükleniyor, hiçbir şey yapma
if ( !IsValid( LocalPlayer() ) ) then return end
local hp = LocalPlayer():Health()
local maxhp = LocalPlayer():GetMaxHealth()
-- Değerler henüz başlatılmadı, şimdi başlat
if ( oldhp == -1 and newhp == -1 ) then
oldhp = hp
newhp = hp
end
-- Burada farklı bir yumuşatma fonksiyonu kullanabilirsiniz
local smoothHP = Lerp( ( SysTime() - start ) / animationTime, oldhp, newhp )
-- Can değiştirildi, animasyonu başlat
if newhp ~= hp then
-- Eski animasyon hala devam ediyor, ayarla
if ( smoothHP ~= hp ) then
-- Mevcut "yumuşak" pozisyonumuzun hedef olduğunu varsayalım ki animasyon
-- eski hedefe atlamasın ve yeni hedefe oradan başlamasın
newhp = smoothHP
end
oldhp = newhp
start = SysTime()
newhp = hp
end
draw.RoundedBox( 4, 100, 200, barW, 100, color_black )
draw.RoundedBox( 4, 100, 200, math.max( 0, smoothHP ) / maxhp * barW, 100, color_white )
end )
Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord