Lerp

  number Lerp( number t, number from, number to )

Açıklama

Başlangıç sayısından bitiş sayısına doğru doğrusal bir enterpolasyon gerçekleştirir.

Bu fonksiyon, hareketleri yumuşatmak için çok verimli ve kolay bir yol sağlar.

Doğrusal enterpolasyon kullanarak doğrusal olmayan animasyonlara sahip olmanızı sağlayan fonksiyonlar için ayrıca bakınız: math.ease.

Bu fonksiyon, animasyonlarla uğraşıyorsanız ilk argümanda sabit bir değerle kullanılmak için tasarlanmamıştır! Zamanla değişen bir değer kullanın. Lerp'in animasyonlar için doğru kullanımı için örneğe bakın.

Argümanlar

1 number t
Sonucu bulmak için kullanılan oran. Bu sayı 0 ile 1 arasında sıkıştırılır. Sabit bir değer olmamalıdır.
2 number from
Başlangıç sayısı. Eğer t 0 ise sonuç bu değere eşit olacaktır.
3 number to
Bitiş sayısı. Eğer t 1 ise sonuç bu değere eşit olacaktır.

Döndürülen Değer

1 number
Doğrusal enterpolasyonun sonucu, from + (to - from) * t.

Ö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