Herkese merhabalar. Bu konuda sizlere DX veya GUI elementlerinize nasıl animasyon ekleyeceğinizi anlatacağım. Genelde animasyonlar konum ve boyut değiştirilerek yapılır. Konum ve boyutlar bildiğiniz gibi sayısal değerler. MTA bizlere sayısal değerler arasında rahatça geçiş yapabilmemiz için çok güzel bir fonksiyon vermiş, interpolateBetween. Bu fonksiyonu bir çok şey için kullanabilirsiniz, sadece animasyonlarınız için değil. Şimdi gelelim fonksiyonun kullanılışına.
Sözdizimi:
Argümanlar
GUI için:
DX için (test edilmedi):
Bu animasyonlarda GUI/DX element ekranın altında ekranın ortasına gelip, ekranın ortasından aşağı kayarak ekranın dışına çıkar. Fonksiyonun mantığını anlamanız için bu konu biraz yetersiz, kendi animasyonlarınızı yapmaya çalışırken daha iyi öğrenirsiniz. Unutmayın bu fonksiyonu sadece animasyon için değil, her şey için kullanabilirsiniz.
Sözdizimi:
Lua:
interpolateBetween ( sayi1, sayi2, sayi3, sayi11, sayi22, sayi33, zaman, geçiş şekli )
Argümanlar
- sayi1,sayi11: ilk değerden (sayi1) geçiş yapılacak 2. değer(sayi11)
- sayi2,sayi22: ilk değerden (sayi2) geçiş yapılacak 2. değer(sayi22)
- sayi3,sayi33: ilk değerden (sayi3) geçiş yapılacak 2. değer(sayi33)
- zaman: 2 getTickCount() değeri arasında kurulan orantıyla iki sayı arasında orantıyı kurup size yeni değeri verir
- geçiş şekli: Bu değerler arasında olması gereken değer ile biraz oynama yapmanızı sağlar. Örneğin panelin olması gereken konumdan biraz daha fazla gidip geri olması gereken konuma gelmesi gibi.
Bağlantıları görmek için lütfen Giriş Yapdenilen fonksiyonlar ile bunu yapabilirsiniz.
GUI için:
Lua:
tus = "F2" -- açma kapatma tuşu
sx,sy = guiGetScreenSize() -- ekran boyutları
pg,pu = 700,500 -- panel genişlik ve uzunluğu
px,py = sx/2-pg/2,sy/2-pu/2 -- panel koordinatları ayarlama
panel = guiCreateStaticImage(px,py,pg,pu,"img.png",false) -- arkaplandaki resmi oluşturma (window,label vb diğer elementlere çevirebilirsin)
guiSetVisible(panel,false) -- paneli görünmez yap
-- RENDER FUNCTION
addEventHandler("onClientRender",root,function()
local now = getTickCount() -- şuanın milisaniyesi
if panel_durum == false then -- eğer panel kapatılacaksa
local _,pyy = guiGetPosition(panel,false) -- panelin x ve y koordinatlarını getirdik
local yy = interpolateBetween(
pyy, -- panelin şuanki y koordinatı
0,0, -- buraya başka değerler yazabilirsiniz ama bu animasyon için başka değere ihtiyacımız yok
(sy+1), -- panelin olması gereken konum
0,0, -- buralar da boş kalıyor çünkü kullanmıyoruz
(now-pTick)/1500, -- burda şuanın milisaniyesinden tuşa basıldığındaki milisaniyeyi çıkarıp 1500'e bölüyoruz
-- 1500 arttığında animasyon yavaşlar, azaldığında animasyon hızlanır
"Linear" -- panelin gitmesi gereken konuma nasıl gideceği
-- şuanki animasyonda nasıl gideceği önemsiz, bunun sebebini fonksiyonu kavradığınızda gelin açıklarım
)
guiSetPosition(panel,px,yy,false) -- panelin yeni konumunu ayarladık
showCursor(false) -- mouseu görünmez yaptık
if yy == (sy+pu+1) then -- eğer panel ekrandan dışarı çıkmışsa
guiSetVisible(panel,false) -- paneli görünmez yaptık
end
elseif panel_durum == true then
local _,pyy = guiGetPosition(panel,false) -- panelin x ve y koordinatlarını getirdik
local yy = interpolateBetween(
pyy, -- panelin şuanki y koordinatı
0,0, -- buraya başka değerler yazabilirsiniz ama bu animasyon için başka değere ihtiyacımız yok
py, -- panelin olması gereken konum
0,0, -- buralar da boş kalıyor çünkü kullanmıyoruz
(now-pTick)/1500, -- burda şuanın milisaniyesinden tuşa basıldığındaki milisaniyeyi çıkarıp 1500'e bölüyoruz
-- 1500 arttığında animasyon yavaşlar, azaldığında animasyon hızlanır
"Linear" -- panelin gitmesi gereken konuma nasıl gideceği
-- şuanki animasyonda nasıl gideceği önemsiz, bunun sebebini fonksiyonu kavradığınızda gelin açıklarım
)
guiSetPosition(panel,px,yy,false) -- panelin yeni konumunu ayarladık
if yy < py+20 then -- eğer panel olması gereken konuma yanaşmış ise
showCursor(true) -- mouseu görünür yaptık
end
end
end)
-- PANEL BIND
panel_durum = false -- panelin durumunu kontrol edeceğimiz bir boolean
pTick = getTickCount() -- scriptin başlatıldığı milisaniye
bindKey(tus,"down",function() -- fonksiyon bind ekledik
guiSetVisible(panel,true) -- fonksiyon her başlatıldığında panel görünür olacak
panel_durum = not panel_durum -- booleanı zıttına çevirdik (true ise false, false ise true olacak)
pTick = getTickCount() -- milisaniyeyi güncelledik
end)
DX için (test edilmedi):
Lua:
tus = "F2" -- açma kapatma tuşu
sx,sy = guiGetScreenSize() -- ekran boyutları
pg,pu = 700,500 -- panel genişlik ve uzunluğu
px,py = sx/2-pg/2,sy/2-pu/2 -- panel koordinatları ayarlama
yy = sy+1
-- RENDER FUNCTION
addEventHandler("onClientRender",root,function()
local now = getTickCount() -- şuanın milisaniyesi
if panel_durum == false then -- eğer panel kapatılacaksa
yy = interpolateBetween(
yy, -- panelin şuanki y koordinatı
0,0, -- buraya başka değerler yazabilirsiniz ama bu animasyon için başka değere ihtiyacımız yok
(sy+1), -- panelin olması gereken konum
0,0, -- buralar da boş kalıyor çünkü kullanmıyoruz
(now-pTick)/1500, -- burda şuanın milisaniyesinden tuşa basıldığındaki milisaniyeyi çıkarıp 1500'e bölüyoruz
-- 1500 arttığında animasyon yavaşlar, azaldığında animasyon hızlanır
"Linear" -- panelin gitmesi gereken konuma nasıl gideceği
-- şuanki animasyonda nasıl gideceği önemsiz, bunun sebebini fonksiyonu kavradığınızda gelin açıklarım
)
dxDrawRectangle(px,yy,pg,pu) -- rectangleyi konuma getirdik
showCursor(false) -- mouseu görünmez yaptık
elseif panel_durum == true then
yy = interpolateBetween(
yy, -- panelin şuanki y koordinatı
0,0, -- buraya başka değerler yazabilirsiniz ama bu animasyon için başka değere ihtiyacımız yok
py, -- panelin olması gereken konum
0,0, -- buralar da boş kalıyor çünkü kullanmıyoruz
(now-pTick)/1500, -- burda şuanın milisaniyesinden tuşa basıldığındaki milisaniyeyi çıkarıp 1500'e bölüyoruz
-- 1500 arttığında animasyon yavaşlar, azaldığında animasyon hızlanır
"Linear" -- panelin gitmesi gereken konuma nasıl gideceği
-- şuanki animasyonda nasıl gideceği önemsiz, bunun sebebini fonksiyonu kavradığınızda gelin açıklarım
)
dxDrawRectangle(px,yy,pg,pu) -- rectangleyi konuma getirdik
if yy < py+20 then -- eğer panel olması gereken konuma yanaşmış ise
showCursor(true) -- mouseu görünür yaptık
end
end
end)
-- PANEL BIND
panel_durum = false -- panelin durumunu kontrol edeceğimiz bir boolean
pTick = getTickCount() -- scriptin başlatıldığı milisaniye
bindKey(tus,"down",function() -- fonksiyon bind ekledik
panel_durum = not panel_durum -- booleanı zıttına çevirdik (true ise false, false ise true olacak)
pTick = getTickCount() -- milisaniyeyi güncelledik
end)
Bu animasyonlarda GUI/DX element ekranın altında ekranın ortasına gelip, ekranın ortasından aşağı kayarak ekranın dışına çıkar. Fonksiyonun mantığını anlamanız için bu konu biraz yetersiz, kendi animasyonlarınızı yapmaya çalışırken daha iyi öğrenirsiniz. Unutmayın bu fonksiyonu sadece animasyon için değil, her şey için kullanabilirsiniz.