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, diğer platformlarda olduğu gibi HTML5 platformu için de standart paketleme (bundling) menüsü üzerinden oyun derlemeyi destekler. Ayrıca ortaya çıkan oyun, basit bir şablon sistemi aracılığıyla biçimlendirilebilen standart bir HTML sayfasına gömülür.
game.project dosyası HTML5’e özgü ayarları içerir:

Defold’un HTML5 desteği Emscripten ile sağlanır (bkz. http://en.wikipedia.org/wiki/Emscripten). Emscripten, uygulamanın çalıştığı öbek (heap) için yalıtılmış bir bellek alanı oluşturur. Motor varsayılan olarak oldukça büyük miktarda bellek (256 MB) ayırır. Bu miktarın tipik bir oyun için fazlasıyla yeterli olması beklenir. Optimizasyon sürecinizin bir parçası olarak daha küçük bir değer kullanmayı seçebilirsiniz. Bunu yapmak için şu adımları izleyin:
HTML5 derlemesini test etmek için bir HTTP sunucusu gerekir. Project ▸ Build HTML5 seçeneğini seçerseniz Defold sizin için bir sunucu oluşturur.

Dağıtım paketinizi test etmek için uzak HTTP sunucunuza yüklemeniz veya örneğin dağıtım paketi klasöründe Python kullanarak yerel bir sunucu oluşturmanız yeterlidir. Python 2:
python -m SimpleHTTPServer
Python 3:
python -m http.server
veya
python3 -m http.server
HTML5 dağıtım paketini, index.html dosyasını tarayıcıda açarak test edemezsiniz. Bunun için bir HTTP sunucusu gerekir.
Konsolda "wasm streaming compile failed: TypeError: Failed to execute ‘compile’ on ‘WebAssembly’: Incorrect response MIME type. Expected ‘application/wasm’." hatasını görürseniz sunucunuzun .wasm dosyaları için application/wasm MIME türünü kullandığından emin olmalısınız.
Defold ile HTML5 içeriği oluşturmak basittir ve desteklenen diğer tüm platformlarla aynı yöntemi izler: menüden Project ▸ Bundle... ▸ HTML5 Application... seçeneğini seçin:

HTML5 dağıtım paketleri iki WebAssembly mimarisini destekler:
wasm-web - iş parçacıklarını (thread) kullanmayan standart WebAssembly motoru.wasm_pthread-web - iş parçacıklarını kullanabilen bir WebAssembly motoru.Mimarilerden birini veya her ikisini de pakete ekleyebilirsiniz. Her ikisi de eklendiğinde yükleyici, tarayıcı ve barındırma ortamı destekliyorsa wasm_pthread-web mimarisini seçer; aksi durumda wasm-web mimarisine geçer. Standart hedef adları için Bob kılavuzuna bakın.
İş parçacıklarını kullanan motor, güvenli ve kökenler arasında yalıtılmış (cross-origin-isolated) bir sayfada SharedArrayBuffer gerektirir. Dağıtım paketini HTTPS (veya localhost) üzerinden sunun ve sunucuyu uyumlu kökenler arası yalıtım üstbilgileriyle yapılandırın. Yaygın olarak kullanılan üstbilgiler şunlardır:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Sayfanın farklı kökenlerden yüklediği kaynaklar da uyumlu CORS veya Cross-Origin-Resource-Policy üstbilgileri kullanmalıdır. Yalnızca wasm_pthread-web içeren bir dağıtım paketi, bu gereksinimler karşılanmadığında çalışamaz; oyun kökenler arası yalıtımı desteklemeyen bir sitede barındırılabilecekse yedek seçenek olarak wasm-web mimarisini de ekleyin.
Defold HTML5 dağıtım paketleri, WebAssembly destekleyen modern bir tarayıcı gerektirir. Internet Explorer 11 desteklenmez.
Create bundle düğmesine tıkladığınızda uygulamanın oluşturulacağı klasörü seçmeniz istenir. Dışa aktarma işlemi tamamlandıktan sonra uygulamayı çalıştırmak için gereken tüm dosyaları bu klasörde bulabilirsiniz.
İstenen grafik bağlamını graphics.webgl_version_hint aracılığıyla seçin. Varsayılan değer WebGL 2’dir; her iki sürümü de destekleyen tarayıcılarda WebGL 1 bağlamını test etmek veya hedeflemek için WebGL 1’i isteyin.
HTML5 yükleyicisi varsayılan olarak indirilen motor ve arşiv dosyalarının boyutlarını kontrol eder. Kontroller başarısız olursa yükleyici hata bildirmeden önce indirmeler yeniden denenir:
html5.retry_count ayarındaki yeniden deneme sınırı kullanılır.html5.retry_time ayarı, her iki durumda da yeniden denemeler arasındaki gecikmeyi kontrol eder.
Sunucunuz, vekil sunucunuz veya CDN’niz sunulan dosyaları kasıtlı olarak yeniden yazıyor ve boyutlarını değiştiriyorsa game.project dosyasında boyut doğrulamasını devre dışı bırakın:
[html5]
verify_downloaded_file_size = 0
Verify Downloaded File Size seçeneğinin devre dışı bırakılması, dağıtım paketine dahil edilen tüm SHA-1 doğrulamalarını etkin bırakır. HTML5 proje ayarlarına bakın.
--verify-graphics-calls=false olarak ayarlayarak bunu devre dışı bırakabilirsiniz.Oyununuzun HTML5 sürümünü oluştururken Defold varsayılan bir web sayfası sağlar. Bu sayfa, oyununuzun nasıl sunulacağını belirleyen stil ve betik kaynaklarına başvurur.
Uygulama her dışa aktarıldığında bu içerik yeniden oluşturulur. Bu öğelerden herhangi birini özelleştirmek istiyorsanız proje ayarlarınızda değişiklik yapmanız gerekir. Bunun için Defold düzenleyicisinde game.project dosyasını açın ve html5 bölümüne kaydırın:

Her seçenek hakkında daha fazla bilgi proje ayarları kılavuzunda bulunur.
builtins klasöründeki varsayılan html/css şablonunun dosyalarını değiştiremezsiniz. Değişikliklerinizi uygulamak için gereken dosyayı builtins klasöründen kopyalayıp yapıştırın ve bu dosyayı game.project içinde ayarlayın.
Tuvale (canvas) kenarlık veya iç boşluk uygulanmamalıdır. Uygularsanız fare girdisinin koordinatları yanlış olur.
game.project dosyasında Fullscreen düğmesini ve Made with Defold bağlantısını kapatabilirsiniz.
Defold, index.html için koyu ve açık tema sağlar. Varsayılan olarak açık tema seçilidir ancak Custom CSS dosyasını değiştirerek temayı değiştirebilirsiniz. Ayrıca Scale Mode alanında seçebileceğiniz dört ön tanımlı ölçek modu vardır.
game.project dosyasında (Display bölümü) High Dpi seçeneğini açarsanız tüm ölçek modlarının hesaplamaları geçerli ekran DPI değerini de içerir
Fit modunda tuvalin boyutu, oyun tuvalinin tamamını özgün oranlarıyla ekranda gösterecek şekilde değiştirilir. Downscale Fit modunun tek farkı, boyutu yalnızca web sayfasının iç boyutu oyunun özgün tuvalinden küçük olduğunda değiştirmesidir; web sayfası oyunun özgün tuvalinden büyük olduğunda tuvali büyütmez.

Stretch modunda tuvalin boyutu, web sayfasının iç alanını tamamen dolduracak şekilde değiştirilir.

No Scale modunda tuvalin boyutu, game.project dosyasının [display] bölümünde önceden tanımladığınız boyutla tamamen aynıdır.

index.html dosyasını oluşturmak için Mustache şablon dilini kullanırız. Projeyi derlerken veya paketlerken HTML ve CSS dosyaları, belirli belirteçleri (token) proje ayarlarınıza bağlı değerlerle değiştirebilen bir derleyiciden geçirilir. Bu belirteçler, karakter dizilerine kaçış uygulanıp uygulanmayacağına bağlı olarak her zaman çift veya üçlü süslü parantez içine alınır ({{TOKEN}} veya {{{TOKEN}}}). Proje ayarlarınızı sık sık değiştiriyorsanız veya içeriği başka projelerde yeniden kullanmayı planlıyorsanız bu özellik yararlı olabilir.
Mustache şablon dili hakkında daha fazla bilgi kılavuzda bulunur.
game.project dosyasındaki her değer bir belirteç olabilir. Örneğin, Display bölümündeki Width değerini kullanmak istiyorsanız:

game.project dosyasını metin olarak açın ve [section_name] değerini ve kullanmak istediğiniz alanın adını kontrol edin. Ardından bunu bir belirteç olarak kullanabilirsiniz: {{section_name.field}} veya {{{section_name.field}}}.

Örneğin, HTML şablonunda JavaScript içinde:
function doSomething() {
var x = {{display.width}};
// ...
}
Ayrıca şu özel belirteçler de vardır:
html5.splash_image boşsa false yazar{{#DEFOLD_SPLASH_IMAGE}}
background-image: url("{{DEFOLD_SPLASH_IMAGE}}");
{{/DEFOLD_SPLASH_IMAGE}}
html5.archive_location_prefix temel alınarak çözümlenen ve yükleyici tarafından kullanılan arşiv yolu öneki.html5.archive_location_suffix temel alınarak çözümlenen ve arşiv URL’lerine eklenen sonek.//cdn.example.com/archive gibi protokole göreli bir URL dahil olmak üzere bir HTTP veya HTTPS kökeni belirtiyorsa true olur. Göreli arşiv önekleri için false olur. Defold 1.13.2’den itibaren kullanılabilir.wasm-web veya wasm_pthread-web olmak üzere bir WebAssembly motoru içeriyorsa true olur.wasm_pthread-web içeriyorsa true olur. Yükleyici mimariyi çalışma sırasında seçtiğinde yanlış motor çeşidinin önceden yüklenmesini önlemek için bunu kullanın.<style>
{{{DEFOLD_CUSTOM_CSS_INLINE}}}
</style>
Bu satır içi bloğun, ana uygulama betiği yüklenmeden önce yer alması önemlidir. HTML etiketleri içerdiği için bu makro, karakter dizilerine kaçış uygulanmasını önlemek üzere üçlü süslü parantez {{{TOKEN}}} içinde yer almalıdır.
html5.scale_mode değeri Downscale Fit ise bu belirteç true olur.html5.scale_mode değeri Fit ise bu belirteç true olur.html5.scale_mode değeri No Scale ise bu belirteç true olur.html5.scale_mode değeri Stretch ise bu belirteç true olur.html5.heap_size ayarında belirtilen öbek boyutunun bayta dönüştürülmüş değeri.html5.engine_arguments ayarında belirtilen, , simgesiyle ayrılmış motor bağımsız değişkenleri.Özel bir şablon oluşturursanız genel CUSTOM_PARAMETERS nesnesinde değer atamaları yaparak motor yükleyicisinin parametrelerini değiştirebilirsiniz. Yerleşik şablon, bu özelleştirmeler için bilerek boş bırakılmış bir <script id="engine-setup"> bloğu sağlar.
engine-setup bloğunu, dmloader.js dosyasını yükleyen betikten sonra ve EngineLoader.load() işlevini çağıran engine-start bloğundan önce tutun.
Örneğin:
<script id="engine-setup" type="text/javascript">
CUSTOM_PARAMETERS.disable_context_menu = false;
CUSTOM_PARAMETERS.unsupported_webgl_callback = function() {
console.log("Oh-oh. WebGL not supported...");
};
</script>
CUSTOM_PARAMETERS, aşağıdakiler dahil çeşitli alanlar içerebilir:
'archive_location_filter':
Filter function that will run for each archive path.
'unsupported_webgl_callback':
Function that is called if WebGL is not supported.
'engine_arguments':
List of arguments (strings) that will be passed to the engine.
'custom_heap_size':
Number of bytes specifying the memory heap size.
'disable_context_menu':
Disables the right-click context menu on the canvas element if true.
'retry_time':
Pause in seconds before retry file loading after error.
'retry_count':
How many attempts we do when trying to download a file.
'can_not_download_file_callback':
Function that is called if you can't download file after 'retry_count' attempts.
'resize_window_callback':
Function that is called when resize/orientationchanges/focus events happened
'start_success':
Function that is called just before main is called upon successful load.
'update_progress':
Function that is called as progress is updated. Parameter progress is updated 0-100.
HTML5 derlemeleri sys.save(), sys.load() ve io.open() gibi dosya işlemlerini destekler, ancak bu işlemlerin içeride nasıl ele alındığı diğer platformlardan farklıdır. JavaScript bir tarayıcıda çalıştırıldığında gerçek anlamda bir dosya sistemi kavramı yoktur ve güvenlik nedeniyle yerel dosya erişimi engellenir. Bunun yerine Emscripten (ve dolayısıyla Defold), tarayıcıda sanal bir dosya sistemi oluşturmak için verileri kalıcı olarak saklamakta kullanılan tarayıcı içi bir veritabanı olan IndexedDB kullanır. Diğer platformlardaki dosya sistemi erişiminden önemli farkı, bir dosyaya yazılması ile değişikliğin veritabanına gerçekten kaydedilmesi arasında küçük bir gecikme olabilmesidir. Tarayıcının geliştirici konsolu genellikle IndexedDB içeriğini incelemenize olanak tanır.
Bazen bir oyuna başlatılmadan önce veya başlatılırken ek bağımsız değişkenler sağlamak gerekir. Bu, örneğin bir kullanıcı kimliği, oturum belirteci veya oyun başladığında hangi seviyenin yükleneceği olabilir. Bunu gerçekleştirmenin farklı yolları vardır; bunlardan bazıları burada açıklanmıştır.
Motor yapılandırılıp yüklenirken ek motor bağımsız değişkenleri belirtmek mümkündür. Bu ek motor bağımsız değişkenleri, çalışma sırasında sys.get_config_string() kullanılarak alınabilir. Bağımsız değişkenleri index.html dosyasının engine-setup bloğunda doğrudan CUSTOM_PARAMETERS.engine_arguments alanına atayın:
<script id="engine-setup" type="text/javascript">
CUSTOM_PARAMETERS.engine_arguments = [
"--config=example.foo1=bar1",
"--config=example.foo2=bar2"
];
</script>
Yeni bir dizi atamak, game.project dosyasında yapılandırılmış tüm motor bağımsız değişkenlerinin yerini alır. Bu bağımsız değişkenleri koruyup bir tane daha eklemek için bunun yerine CUSTOM_PARAMETERS.engine_arguments.push("--config=example.foo3=bar3") kullanın.
Ayrıca game.project dosyasının HTML5 bölümündeki Engine Arguments alanına --config=example.foo1=bar1, --config=example.foo2=bar2 ekleyebilirsiniz. Virgülle ayrılmış değerler, oluşturulan dmloader.js dosyasındaki CUSTOM_PARAMETERS.engine_arguments alanına eklenir.
Çalışma sırasında değerleri şöyle alırsınız:
local foo1 = sys.get_config_string("example.foo1")
local foo2 = sys.get_config_string("example.foo2")
print(foo1) -- bar1
print(foo2) -- bar2
Bağımsız değişkenleri sayfa URL’sindeki sorgu parametrelerinin bir parçası olarak aktarabilir ve bunları çalışma sırasında okuyabilirsiniz:
https://www.mygame.com/index.html?foo1=bar1&foo2=bar2
local url = html5.run("window.location")
print(url)
Tüm sorgu parametrelerini bir Lua tablosu olarak alan eksiksiz bir yardımcı işlev:
local function get_query_parameters()
local url = html5.run("window.location")
-- get the query part of the url (the bit after ?)
local query = url:match(".*?(.*)")
if not query then
return {}
end
local params = {}
-- iterate over all key value pairs
for kvp in query:gmatch("([^&]+)") do
local key, value = kvp:match("(.+)=(.+)")
params[key] = value
end
return params
end
function init(self)
local params = get_query_parameters()
print(params.foo1) -- bar1
end
HTML5 oyunlarında, düşük donanımlı cihazlarda ve yavaş internet bağlantılarında oyunların hızlı yüklenmesini ve iyi çalışmasını sağlamak için ilk indirme boyutu, başlatma süresi ve bellek kullanımı konusunda genellikle sıkı gereksinimler vardır. Bir HTML5 oyununu optimize etmek için şu alanlara odaklanmanız önerilir:
A: Bazı durumlarda bir oyunu tarayıcıda yerel dosya sisteminden çalıştırmak mümkün değildir. Oyunu düzenleyiciden çalıştırdığınızda oyun yerel bir web sunucusundan sunulur. Örneğin, Python’daki SimpleHTTPServer modülünü kullanabilirsiniz:
$ python -m SimpleHTTPServer [port]
A: Bu durum genellikle Windows kullanırken bir derleme çıktısı oluşturup bunu Git’e kaydettiğinizde (commit) ortaya çıkar. Git’teki satır sonu yapılandırmanız yanlışsa Git satır sonlarını ve dolayısıyla veri boyutunu da değiştirir. Sorunu çözmek için şu yönergeleri izleyin: https://docs.github.com/en/free-pro-team@latest/github/using-git/configuring-git-to-handle-line-endings