This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold, kaynakları (resource) çalışma sırasında yeniden yüklemenizi (hot reload) sağlar. Oyun geliştirirken bu özellik belirli görevleri büyük ölçüde hızlandırır. Oyunun kodunu ve içeriğini oyun çalışırken değiştirmenize olanak tanır. Yaygın kullanım alanları şunlardır:
Oyunu düzenleyiciden başlatın (Project ▸ Build).
Ardından güncellenmiş bir kaynağı yeniden yüklemek için File ▸ Hot Reload menü öğesini seçmeniz veya klavyede ilgili kısayola basmanız yeterlidir:

Çalışma sırasında yeniden yükleme, masaüstünde olduğu gibi cihazda da çalışır. Bu özelliği cihazda kullanmak için mobil cihazınızda oyunun hata ayıklama derlemesini veya geliştirme uygulamasını çalıştırın, ardından düzenleyicide hedef olarak seçin:

Artık projeyi derleyip çalıştırdığınızda düzenleyici tüm varlıkları (asset) cihazda çalışan uygulamaya yükler ve oyunu başlatır. Bundan sonra çalışma sırasında yeniden yüklediğiniz her dosya cihazda güncellenir.
Örneğin, telefonunuzda çalışan bir oyunda gösterilen GUI’ye birkaç düğme eklemek için GUI dosyasını açmanız yeterlidir:

Yeni düğmeleri ekleyin, GUI dosyasını kaydedin ve çalışma sırasında yeniden yükleyin. Artık yeni düğmeleri telefon ekranında görebilirsiniz:

Bir dosyayı çalışma sırasında yeniden yüklediğinizde motor, yeniden yüklenen her kaynak dosyasını konsola yazdırır.
Yeniden yüklenen her Lua betik dosyası, çalışan Lua ortamında yeniden yürütülür.
local my_value = 10
function update(self, dt)
print(my_value)
end
my_value değerini 11 olarak değiştirip dosyayı çalışma sırasında yeniden yüklediğinizde değişiklik hemen etkili olur:
...
DEBUG:SCRIPT: 10
DEBUG:SCRIPT: 10
DEBUG:SCRIPT: 10
INFO:RESOURCE: /main/hunter.scriptc was successfully reloaded.
DEBUG:SCRIPT: 11
DEBUG:SCRIPT: 11
DEBUG:SCRIPT: 11
...
Çalışma sırasında yeniden yüklemenin yaşam döngüsü (lifecycle) işlevlerinin yürütülmesini değiştirmediğini unutmayın. Örneğin, çalışma sırasında yeniden yükleme yapıldığında init() çağrılmaz. Ancak yaşam döngüsü işlevlerini yeniden tanımlarsanız yeni sürümleri kullanılır.
Bir modül dosyasında değişkenleri genel kapsama (global scope) eklediğiniz sürece, dosyayı yeniden yüklemek bu genel değişkenleri değiştirir:
--- my_module.lua
my_module = {}
my_module.val = 10
-- user.script
require "my_module"
function update(self, dt)
print(my_module.val) -- hot reload "my_module.lua" and the new value will print
end
Lua modüllerinde yaygın bir yaklaşım, yerel bir tablo oluşturmak, tabloyu doldurmak ve ardından döndürmektir:
--- my_module.lua
local M = {} -- a new table object is created here
M.val = 10
return M
-- user.script
local mm = require "my_module"
function update(self, dt)
print(mm.val) -- will print 10 even if you change and hot reload "my_module.lua"
end
my_module.lua dosyasını değiştirip yeniden yüklemek, user.script dosyasının davranışını değiştirmez. Bunun nedeni ve bu sorundan nasıl kaçınabileceğiniz hakkında daha fazla bilgi için Modüller kılavuzuna bakın.
Her betik bileşeni (script component) bir on_reload() işlevi tanımlayabilir. Bu işlev varsa betik her yeniden yüklendiğinde çağrılır. Bu, verileri incelemek veya değiştirmek, ileti göndermek ve benzeri işlemler için kullanışlıdır:
function on_reload(self)
print(self.velocity)
msg.post("/level#controller", "setup")
end
Köşe gölgelendiricileri (vertex shader) ve parça gölgelendiricileri (fragment shader) yeniden yüklenirken GLSL kodu grafik sürücüsü tarafından yeniden derlenir ve GPU’ya yüklenir. Gölgelendirici kodu bir çökmeye yol açarsa motor da çöker; GLSL çok düşük düzeyde yazıldığı için buna yol açmak kolaydır.