GELİŞTİRİCİ LABORATUVARI
Oyunun, birlikte daha büyük.
SBNovaLab, standart HTML5 oyunlarını izole bir iframe içinde çalıştırır. ZIP dosyanın kökünde veya tek bir üst klasörün doğrudan içinde index.html bulunmalı. Dosya yollarında ASCII harf, rakam, tire ve alt çizgi kullan.
Bir dakikada entegrasyon
sdk.js dosyasını oyun ZIP’ine ekle ve oyun kodundan önce yükle:
<script src="sdk.js"></script>
<script src="game.js"></script>
// game.js
SBNova.gameReady();
// Oyuncu başlat düğmesine dokunduğunda:
SBNova.start();
SBNova.setScore(120);
SBNova.end(120);Sorular ve ayarlar yönetim panelinden gelsin
Paketine sbnovalab.game.json ekle. Manifest, İçerik ve Oyun Ayarları sekmelerini etkinleştirir. Veritabanına host bağlanır; oyun veriyi SDK üzerinden alır.
{
"schemaVersion": 1,
"name": "Benim soru oyunum",
"entry": "index.html",
"capabilities": [
"content",
"categories",
"settings"
],
"content": {
"collections": [
{
"key": "questions",
"name": "Sorular",
"type": "question"
}
]
},
"settings": [
{
"key": "questionCount",
"label": "Soru Sayısı",
"type": "number",
"default": 20,
"min": 1,
"max": 100
},
{
"key": "sound",
"label": "Ses",
"type": "boolean",
"default": true
}
]
}const data = await SBNova.getGameData();
const settings = await SBNova.getSettings();
const questions = data.collections.questions;
// Verilerle oyun arayüzünü hazırladıktan sonra:
SBNova.ready();
SBNova.on("pause", () => pauseGame());
SBNova.on("volume", value => setVolume(value));İçerikler, kategori anahtarları ve ayarlar her yeni oyun açılışında güncel alınır. Pasif sorular ve pasif kategoriler gönderilmez. Üyelere özel oyunun verisi için üye oturumu gerekir.
TypeScript tiplerini indirManifest içermeyen eski oyunlar
Eski HTML5 paketleri SDK hazır mesajı beklenmeden açılır. Yönetici önizlemesindeki Teknik Detaylar alanı eksik dosyaları ve yükleme durumunu gösterir. Tek bir üst klasör desteklenir; iç içe klasörlerde belirsiz giriş dosyası araması yapılmaz.
Platformdan gelen mesajlar
const unsubscribe = SBNova.onHost(message => {
if (message.type === "host:pause") pauseGame();
if (message.type === "host:resume") resumeGame();
if (message.type === "host:restart") resetGame();
if (message.type === "host:volume") setVolume(message.value);
if (message.type === "host:theme") setTheme(message.value);
if (message.type === "host:config") applyConfig(message.value);
});Oyun sözleşmesi
- Responsive ve dokunmatik ekranlara uygun tasarla.
- Dış URL’ler yerine paket içindeki göreli dosya yollarını kullan.
- iframe çerezlere ve üst sayfa DOM’una erişemez. Eski oyunlar için oyun başına sınırlı Web Storage uyumluluğu bulunur; kalıcı oyun içeriğini SDK veri API’sinden al.
- Başlangıç, yeniden başlatma ve bitiş olaylarını gerçek kullanıcı akışında gönder.
- Pause mesajında sayaçları ve animasyonları durdur.
- ZIP: 20 MB; açılmış paket: 80 MB; dosya: 16 MB; en fazla 500 giriş.