Panellerde Animasyon Yapma

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı ertrldtcu

  • Uzman Üye
  • *
    • İleti: 589
: 16 Aralık 2017, 18:54:16
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:
Kod: 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)
- yukarıdaki 3 değer sıralı şekilde birbirleri arasında geçiş yapar
  • 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ı gerkeen konuma gelmesi gibi. Bunları Linki görebilmek için Kayıt olun yada Giriş yapın. denilen fonksiyonlar ile bunu yapabilirsiniz.
Şimdi bir örnek ile bunu daha iyi kavrayın

GUI için:
Kod: 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:
Kod: 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.

Konu çok iyi olmadı, zamanla düzenlenilebilir.

Ders tarafımca yazılmıştır.
« Son Düzenleme: 14 Haziran 2018, 10:30:48 Gönderen: LJ »
system
 


MTASATURK

Panellerde Animasyon Yapma
« : 16 Aralık 2017, 18:54:16 »

Çevrimdışı Nameless

  • Serhat Üner
  • Yeni Üye
  • *
    • İleti: 75
  • Hunter Gaming | Kurucu & Yönetici
Yanıtla #1 : 16 Aralık 2017, 19:27:48
Yararlı konu.Teşekkürler.
 


Çevrimdışı #ScottCoder

  • Acemi Üye
  • *
    • İleti: 107
  • 👑 AXE FREEROAM 👑
Yanıtla #2 : 16 Aralık 2017, 19:37:01
Cok ama cok yararlı bir konu :)
 


Çevrimdışı Narkoz

  • Kurucu
  • *
    • İleti: 507
  • SH Gaming
Yanıtla #3 : 16 Aralık 2017, 19:47:05
Bilmeyenler için yararlı olacağını düşünüyorum. :D
 


Çevrimdışı ertrldtcu

  • Uzman Üye
  • *
    • İleti: 589
Yanıtla #4 : 16 Aralık 2017, 23:39:12
Hepinize teşekkür ederim.
Konu altından istediğiniz bir animasyonu GUI element olması şartıyla yapabilirim.
system
 


Çevrimdışı UtkuReis

  • Yeni Üye
  • *
    • İleti: 85
Yanıtla #5 : 17 Aralık 2017, 12:12:20
Yararlı Paylaşım.Teşekkürler.
 


MTASATURK

Ynt: Panellerde Animasyon Yapma
« Yanıtla #5 : 17 Aralık 2017, 12:12:20 »

Çevrimdışı Paradox

  • Kurucu
  • *
    • İleti: 684
  • SH Gaming
Yanıtla #6 : 17 Aralık 2017, 12:34:44
Yararlı bir anlatım olmuş, teşekkürler.
 


Çevrimdışı #Serius

  • Uzman Üye
  • *
    • İleti: 685
Yanıtla #7 : 25 Ağustos 2020, 20:55:19
Linki görebilmek için Kayıt olun yada Giriş yapın.
Hepinize teşekkür ederim.
Konu altından istediğiniz bir animasyonu GUI element olması şartıyla yapabilirim.

Horlattım kusura bakmayın, faded animasyonu istiyorum gui panel için açılırken yavaş yavaş şefaflığı artarak açılcak kapanırken ise aynı şekilde yavaş yavaş şefaflığı düşerek kapanacak.

Linki görebilmek için Kayıt olun yada Giriş yapın.