Aset, pustaka, dan budget
Folder assets/
Semua isi assets/ disalin apa adanya ke bundel. Baca dengan ctx.assets.url():
const gambar = new Image();
gambar.src = ctx.assets.url('sprites/yoo.webp');
const data = await fetch(ctx.assets.url('level/1.json')).then((r) => r.json());
File yang di-import dari kode (CSS dengan ?inline, JSON) ikut masuk ke main.js; itu cocok untuk yang kecil. Gambar, audio, dan model sebaiknya di assets/.
Aturan path: huruf, angka, _, -, .; tanpa spasi; tanpa folder berawalan titik. Tipe file yang boleh ada di Referensi bundel.
Ikon dan cover
Di assets/meta/, dirujuk dari media di manifest:
| Bentuk | Catatan | |
|---|---|---|
icon |
Persegi, SVG (disarankan) atau PNG | Dipakai sebagai mask: satu warna di atas latar transparan. Platform mewarnainya dengan media.color |
cover |
16:9, minimal 1280×720 | Tampil utuh di lobi di samping judul |
color |
#rrggbb |
Warna game di katalog. Harus terbaca di latar gelap host (kontras minimal 3:1) |
Pustaka bersama
PixiJS dan Rapier tidak ikut di-bundle. Platform menyajikannya sekali untuk semua game, dan build game membiarkannya sebagai impor:
import 'pixi.js/unsafe-eval'; // wajib, sebelum membuat Application
import { Application } from 'pixi.js';
import RAPIER from '@dimforge/rapier2d-compat';
- Pasang sebagai devDependency dengan versi yang sama persis dengan platform (
[email protected],@dimforge/[email protected]), supaya tipenya cocok dengan yang berjalan. pixi.js/unsafe-evalwajib: sandbox melarangeval, dan tanpa patch itu Pixi menolak jalan.- Rapier: panggil
await RAPIER.init()dipreload. - Pustaka lain (tween, util) boleh, tetapi ikut masuk ke
main.jsdan menambah ukurannya.
Daftar lengkap impor yang tersedia ada di Referensi bundel. lint gagal kalau main.js mengimpor paket yang tidak disediakan platform dan tidak ikut di-bundle.
Ukuran
Ada batas keras (bundel ditolak) dan budget muat (peringatan). Angkanya di Referensi bundel. Yang paling berpengaruh ke waktu tunggu pemain:
- Gambar: WebP atau AVIF, ukuran sesuai tampilnya. Sprite sheet untuk yang banyak dan kecil.
- Audio: Ogg/Opus. Musik biasanya file terbesar; pertimbangkan bitrate dan durasinya.
- Urutan muat: muat yang dibutuhkan layar pertama di
preload, sisanya saat dibutuhkan.
Panel Bundle di Ralystudioo dan keluaran ralystudioo lint menunjukkan ukuran total, JavaScript, dan file terbesar.
fps
Sasaran: 60 fps di laptop dengan GPU terintegrasi.
- Baris
GAMEdi HUD Ralystudioo menunjukkan fps, waktu frame rata-rata/p95/maks, dan jumlah frame di atas 50 ms, diukur di dalam game. - Batasi resolusi render. Di atas 1,5× piksel perangkat, GPU terintegrasi membayar untuk piksel yang tidak terlihat dari sofa.
- Untuk game berat,
ResolutionGovernormenurunkan resolusi saat fps jatuh dan menaikkannya lagi dengan hati-hati:
import { ResolutionGovernor } from '@ralyoo/sdk/governor';
const governor = new ResolutionGovernor({ max: Math.min(devicePixelRatio, 1.5) });
// tiap frame:
const berikut = governor.frame(frameMs);
if (berikut !== null) renderer.setPixelRatio(berikut);
Performa game adalah tanggung jawab pembuat game; latensi input dan koneksi adalah tanggung jawab Ralyoo.