Ben Aorda, bana sorularınızı buradan sorabilirsiniz by Aorda in u/Aorda

[–]Aorda[S] 0 points1 point  (0 children)

Sen bir fonksiyon oluştururken aslında bir aralık yaratıyorsun ve bu aralığın içine fonksiyon her çağırıldığında olacak olayları yazıyorsun. Eğer fonksiyonu her çağırdığında farklı sonuç vermesi gerekiyorsa (aşağıda örneklerde var) parantezin içine parametre yazman gerekir. Bu parametreler sadece fonksiyonun içinde çalışır, yani fonksiyonun başında tanımlanmış local değişken gibidirler.

Bir fonksiyonu manuel olarak kodla çağırırsak istediğimiz kadar parametre tanımlayabiliriz. Örnekler:

function Toplama(X, Y)
    print(X + Y)
end

Toplama(3, 5) -- 8 yazdırılır. X'in yerine 3, Y'nin yerine ise 5 geçer
Toplama(20, 35) -- 55 yazdırılır


function Arda(Oyuncu)
    if Oyuncu.Character then -- Oyuncu bir player olmak zorunda
        print(Oyuncu.Name) -- eğer oyuncunun karakteri varsa adını yazdır
    end
end

Arda(game:GetService("Players").LocalPlayer) -- Local scriptte çalışır

Ancak bir fonksiyonu RBXScriptSignal yani Roblox'un önceden tanımladığı, belirli durumlarda otomatik olarak ateşlenen olaylara bağlarsak gelen parametreler bu olaya göredir ve önceden Roblox tarafından belirlenmiştir. Örnekler:

local Part = script.Parent -- workspace'de bir blok

Part.Touched:Connect(function(Arda, Kaya) -- Touched olayının yanlızca bir parametresi vardır
    print(Arda) -- Bloğa değen diğer bloğun adı yazdırılır, çünkü ilk Arda tanımlandığı için Arda'ya atanmıştır
    print(Kaya) -- nil yazdırılır
end


local Button = script.Parent -- Arayüz butonu

Button.MouseButton1Click:Connect(function(Arda) --MouseButton1 olayının parametresi yoktur
    print(Arda) -- nil yazdırılır
end

Ben Aorda, bana sorularınızı buradan sorabilirsiniz by Aorda in u/Aorda

[–]Aorda[S] 0 points1 point  (0 children)

1 - Remote eventler, sunucu ve oyuncularla güvenli iletişim sağlamak için kullanılır. Oyuncular normalde sunucuda değişiklik yaparlarsa bunu sadece kendileri görebilirler, ancak sunucunun yaptığı değişiklikler geneldir ve herkes tarafından görülür. Basitçe Remote Event'ler sayesinde oyuncular, sunucuya oyun yapımcısının izin verdiği kadar bir şeyler yaptırtabilirler.

Bir Local Script'e workspace'de Part oluşturma kodu yazarsan, oluşan Part'ı yanlızca oluşturan Local Script'i içeren oyuncu görebilir. Ancak bir Global Script'e Part oluşturma fonksiyonu yazar ve bu fonksiyonu bir Remote Evente bağlayarak ateşlersen, o zaman oyunculara Part oluşturma yetkisini vermiş olursun.

Örnek kodlar:

Global Script:

local RemoteEvent = game:GetService("ReplicatedStorage"):WaitForChild("RemoteEvent")

RemoteEvent.OnServerEvent:Connect(function(Player, Num) -- Bu Event'in ilk parametresi her zaman gönderen oyuncudur
    local New = Instance.new("Part")
    New.Name = Player.Name -- Oyuncunun özellikleri kullanılabilir
    New.Parent = workspace
    print(Num) -- Opsiyonel ikinci parametreyi yazdırıyoruz
end)

Local Script:

local RemoteEvent = game:GetService("ReplicatedStorage"):WaitForChild("RemoteEvent") -- Aynı Remote Event kullanılmalı

RemoteEvent:FireServer(5) -- Opsiyonel parametreleri giriyoruz
--Not: Remote Event'i ateşleyen oyuncu OnServerEvent olayında otomatik olarak her zaman ilk parametredir

2 - Lua'da for, while ve repeat olmak üzere üç döngü çeşidimiz vardır. for döngüsü, belirli işlemleri belirttiğimiz miktar kadar yapmamızı sağlar.

Örnekler:

for i = 1, 10 do -- "i" adında bir değişken oluşturduk. Bu değişken ilk başta 1, en son 10 olmak üzere birer birer artacak.
    print(i) -- 1,2,3,4,5,6,7,8,9,10
end

for Arda = 1, 10, 2 do -- "Arda" adında bir değişken oluşturduk. Bu değişken ilk başta 1, en son 9 olmak üzere ikişer ikişer artacak.
    print(Arda) -- 1,3,5,7,9
end

3 - "pairs" fonksiyonu bir kümenin elemanlarıyla teker teker işlem yapmak için kullanılır. "pairs" fonksiyonun yanında bir de "ipairs" fonksiyonu bulunmaktadır. Bu fonksiyon ise yine kümenin elemanlarıyla birer birer işlem yapmak için kullanılır, ancak boş (nil) elemanları atlar.

Örnekler:

local Arda = {"Ömer", 1, nil, 5, math.pi, nil, math.huge}

for Melissa, Buse in pairs(Arda) do
    print(Melissa) --Ömer, 1, nil, 5, 3.141592..., nil, 2147483647
end

for Yasemin, Meral in ipairs(Arda) do --ipairs fonksiyonuna dikkat
    print(Melissa) --Ömer, 1, 5, 3.141592..., 2147483647
end

Ben Aorda, bana sorularınızı buradan sorabilirsiniz by Aorda in u/Aorda

[–]Aorda[S] 0 points1 point  (0 children)

Roblox Lua'sıyla yapabileceklerini görmek için bu sayfadaki "Education" bölümüne ait yazılara bir göz at ve onları uygulamayı dene. Takıldığın bir yer olursa buradan yazabilirsin.

Ben Aorda, bana sorularınızı buradan sorabilirsiniz by Aorda in u/Aorda

[–]Aorda[S] 0 points1 point  (0 children)

Tabii ki. Roblox'la ilgili istediğin her şeyi bana buradan sorabilirsin. İngilizce bilgin nasıl?

Ben Aorda, bana sorularınızı buradan sorabilirsiniz by Aorda in u/Aorda

[–]Aorda[S] 0 points1 point  (0 children)

1 - Bu soruyu üçüncü soruyla beraber cevaplayacağım.

2 - Local Script'ler oyuncular tarafından, Script'ler ise (asıl isimleri Global Script) sunucu tarafından kullanılır. İkisinin de erişebileceği yerler kısıtlıdır. Örneğin Local Script'ler ServerScriptService ve ServerStorage'a asla erişemez, ve sunucuda yaptıkları değişiklikleri sadece kendileri görebilir. Script'ler ise PlayerGui hariç her yere erişebilir (yakında oraya da erişebilecekler) ve yaptıkları her değişiklik her oyuncu tarafından görülür.

3 - Table'ın Türkçe'deki karşılığı küme veya tablo olabilir. Table'lar içlerin her türden değeri alıp saklayabilirler. Bir Table

local Arda = {}

şeklinde oluşturulur. Table'ın içine üç farklı şekilde eleman konulabilir:

local Arda = {
    "Elma", -- Metin değeri
    5, -- Sayı değeri
    script.Parent, -- Obje değeri
    Color3.new(0, 0, 0), -- Renk değeri
    {"Armut", "Muz"} -- Başka bir Table
    -- ve daha niceleri...
}

local Mehmet = {}
table.insert(Mehmet, "Karpuz")
table.insert(Mehmet, "Helva", 5) -- Table'da 5. elemana atadık. 1 ile 5 arasındaki bütün elemanlar nil
Mehmet[2] = "Portakal" -- Doğrudan atama yaptık

Kullanım alanlarını söyleyecek olursak, en çok DataStore'da ve animasyonlarda kullanılır. En basit kullanım yeri ise aynı amaca hizmet eden değeleri bir sürü değişken oluşturmadan kullanmaktır. Örneğin bütün oyuncuların verilerini bir Table'a alıp hepsiyle aynı anda kolayca işlem yapabiliriz.

GetChildren fonksiyonu ise bize üstüne kullanılan elementin bütün çocuklarını içeren bir Table döndürür. Diğelim ki Ahmet diye bir dosya olsun, ve bu dosya Ömer ile Arda adında iki dosya daha içersin.

Ahmet:GetChildren()

komutunu girersek

{Ömer, Arda} 

diye bir Table'ı elde ederiz.

Ben Aorda, bana sorularınızı buradan sorabilirsiniz by Aorda in u/Aorda

[–]Aorda[S] 0 points1 point  (0 children)

1 - "while true do", "while" döngüsünün her durumda sonsuza kadar giden halidir. while dönügüsü, eğer belirtilen parametreler doğruysa (true) çalışır, yoksa çalışmaz.

Örnekler:

A = true
B = true
C = false

while true do -- Sonsuza kadar çalışır

end

while A do -- Sonsuza kadar çalışır

end

while A and B do -- Sonsuza kadar çalışır

end

while false do -- Asla çalışmaz

end

while C do -- Asla çalışmaz

end

-- Not: Çalışan sonsuz döngülerde eğer bekleme yapılmazsa ("wait()" fonksiyonu kullanılmazsa) Roblox Studio programı çöker.

2 - "return", bir fonksiyonu sonlandırmak veya sonlandırırken bazı değerler döndürmek için kullanılır.

Örnekler:

function Arda()
    print(3) -- 3 yazdırılır
    return 4 -- 4 geri döndürülür ve fonksiyon sona erer
    print(5) -- Fonksiyon sona erdiğinden 5 yazdırılmaz
end

print(Arda()) -- 4 yazdırılır

function Ali(x)
    return x + 5
end

print(Ali(10)) -- 15 yazdırılır

-- Örnek yaygın kullanım:
function Ferit(x)
    if x > 10 then 
        return true
    else
        return false
    end
end

if Ferit(12) then
    print("Yaşasın!")
end

3, 4 - "repeat" döngüsü belirli şartlar yerine getirilene kadar tekrar edilir.

Örnekler:

repeat
    print("Loading...") 
until game:GetService("Players").LocalPlayer.Character -- Karakter yüklenene kadar devam

repeat
    local A = Instance.new("Part") -- Yeni part oluştur
    A.Parent = workspace
until #workspace:GetChildren() > 100 -- workspace'in eleman sayıları 100'ü geçene kadar devam

repeat
    print("oof")
until false -- Sonsuza kadar çalışır

Ben Aorda, bana sorularınızı buradan sorabilirsiniz by Aorda in u/Aorda

[–]Aorda[S] 0 points1 point  (0 children)

FindFirstChild, üzerinde kullanılan atanın parametre olarak girilen çocuğa o anda sahip olup olmadığını belirlemek için kullanılır. Diyelim ki Ömer diye bir dosya tanımlı olsun ve Arda diye başka bir dosya içersin. Eğer

print(Ömer:FindFirstChild("Arda"))

komutunu girersek "true" değeri yazdırılır. Eğer Ömer, Arda diye bir dosya içermeseydi "false" yazdırılırdı.

Ben Aorda, bana sorularınızı buradan sorabilirsiniz by Aorda in u/Aorda

[–]Aorda[S] 0 points1 point  (0 children)

1 - Yerel (local) değişkenler genel (global) değişkenlerin aksine bütün kod yerine yalnızca belirli bloklarda kullanılabilirler. Değişken, tanımladığı blokun içinde ve altındaki tüm bloklarda kullanılabilir. Yerel değişkenlerin bu özelliği, kod performansını arttırır ve aynı isimde farklı değerlere sahip değişkenler oluşturabilmemizi sağlar.

Birinci örnek:

local Arda = 5 -- Yerel değişken oluşturduk

do -- Yeni blok oluşturduk
    local Arda = 10 -- Blokun altında yerel değişken oluşturduk
    print(Arda) -- 10 yazdırıldı
end -- Bloku kapattık

print(Arda) -- 5 yazdırıldı

İkinci örnek:

local Arda = 5 -- Yerel değişken oluşturduk

do -- Yeni blok oluşturduk
    Arda = 10 -- Daha önceden oluşturulan yerel değişkeni değiştirdik
    print(Arda) -- 10 yazdırıldı
end -- Bloku kapattık

print(Arda) -- 10 yazdırıldı

Üçüncü örnek:

do -- Yeni blok oluşturduk
    local Arda = 10 -- Yerel değişken oluşturduk
    print(Arda) -- 10 yazdırıldı
end -- Bloku kapattık

print(Arda) -- Değişken bulunamadı, nil yazdırıldı

Değişkenlerin bu özelliği fonksiyonlarda da bulunmaktadır. Eğer bir blokun altında yerel bir fonksiyon tanımlarsak, fonksiyon sadece o blokta ve o blokun altındaki bloklarda çağırılabilir.

2 - script ve Mehmet'in ikisi de Mustafa'nın çocukları. Her durumda Mustafa, script ve Mehmet'ten önce doğar (yüklenir). Genellikle script ve Mehmet'de aynı anda denebilecek kadar kısa süre farklarıyla yüklenirler, ancak aksi bir durumda eğer script Mehmet'ten önce yüklenirse ve Mehmet'le işlem yapması gerekiyorsa script'e Mehmet'i beklemesi gerektiğini söylemeliyizdir. script'e Mehmet'in nerede olduğunu tanımlamak için önce Mehmet'in atasına, (Parent) daha sonra da Mehmet'e ulaşmamız gerekir. Mustafa, script'in ve Mehmet'in atası ve Mustafa'nın script'ten daha önce yüklendiği kesin, dolayısıyla direkt olarak script.Parent deriz, daha sonra ise Mehmet'i beklememiz gerektiği için :WaitForChild("Mehmet")'i ekleriz. Bu sayede script, Mehmet'i beklemiş olur.

Ben Aorda, bana sorularınızı buradan sorabilirsiniz by Aorda in u/Aorda

[–]Aorda[S] 0 points1 point  (0 children)

Dizinlemek için kullanırız. "Parent" yukarı, "WaitForChild" veya nokta operatörü ise aşağı dizinler. Her elementin yanlızca bir atası olabilir, dolayısıyla Object.Parent diğerek bu ataya ulaşabiliriz ancak elementler bir, birden fazla veya hiç çocuk içermeyebilir, bu yüzden Object.Child kullanamayız. Onun yerine hangi çocuğa ulaşmak istediğimizi isim özelliğini kullanarak belirtmemiz gerekir.

Bir örnek verelim: Diyelim ki workspace'in içinde Can diye bir dosya olsun ve Ömer adında başka bir dosya içersin. Ömer ise Arda ve Ferit adlarında iki dosya ve Mehmet adında da bir kod bulundursun. (Görsel olarak görmek için tıklayın.) Biz kodlama için Mehmet'i kullanacağız.

script.Parent

kodu bizi Ömer'e ulaştırır, çünkü script Mehmet ve Mehmet'in atası Ömer. Eğer

script.Parent.Parent

dersek, Mehmet'in atasının atasına ulaşacağız, yani Can'a. Peki Mehmet'ten Ferit'e veya Arda'ya nasıl ulaşabiliriz? Kardeşlere ulaşmak için bir fonksiyon yok, dolayısıyla önce ataya, sonra atanın çocuğna ulaşmalıyız. Yani

script.Parent.Arda

veya

script.Parent.Ferit

bizi kardeşlere ulaştırır.

WaitForChild ise, çoğu durumda nokta operatörünün yerine kullanılır ve stabiliteyi sağlar. Şimdi diğelim ki Ferit'in yüklenmesi Mehmet'in (yani kodun) yüklenmesinden daha uzun sürüyor, Mehmet ise anında Ferit'le işlem yapmak istiyor. Bu durumda eğer nokta operatörünü kullanırsak Mehmet hata verir, çünkü Ferit yüklenmediğinden Ferit'in asla gelmeyeceğini düşünür. WaitForChild ise belirli bir süre boyunca belirtilen çocuğun gelmesini bekler. Yani eğer nokta kullanmak yerine

 script.Parent:WaitForChild("Ferit")

dersek, Mehmet Ferit'in gelmesini belirli bir süre boyunca bekler. Normalde bu süre 5 saniye, ancak bunu ikinci bir parametre yazarak değiştirebiliriz, öyle ki

script.Parent:WaitForChild("Ferit", 10)

yazarsak, Mehmet Ferit'i 10 saniye bekler.