Kamera Skrollingi va Procedural Dunyo Generatsiyasi
800x400 o'lchamdagi tor qafasdan ozod bo'lamiz: kamera koordinatalari, silliq kinoeffekt Lerp ergashishi, ko'p qatlamli fon parallaksi va cheksiz procedural dunyo generatsiyasi.
Statik Ekran Cheklovi: Nega qahramon ekranga urilib qoladi?
- O'yin maydoni Canvas kengligi (800 piksel) bilan cheklangan.
- O'yinchi o'ngga yugursa, ekrandan chiqib ko'rinmay ketadi.
- Uzoq sarguzashtlar yoki cheksiz yugurish o'yinlarini yaratib bo'lmaydi.
- Qahramon doim ekranning qulay hududida (28% chapda) turadi.
- Dunyo uzunligi 1,000,000+ pikselga cho'zilishi mumkin!
- Platformalar va kristallar oldinda avtomatik paydo bo'laveradi.
World Space vs Screen Space: Obyekt Aslida Qayerda?
O'yin olamidagi haqiqiy mutlaq koordinata. Masalan: xazina sandig'i dunyoda x = 3500 px masofada turibdi. Bu o'zgarmasdir.
O'yinchining monitoridagi piksellar (0 dan 800 px gacha). Kamera ayni paytda qayerga qarab turganiga bog'liq!
Agar sandiq 3500 px da bo'lsa va kamera 3200 px ga siljigan bo'lsa, u ekranning 3500 - 3200 = 300 pikselida chiziladi!
Butun Dunyoni Bitta Qatorda Siljitish: ctx.translate()
Camera Lerp: Qattiq Bog'lash Nega Xato?
Qahramon har sakraganda ekran shiddat bilan silkinadi. Tasvir titrab, o'yinchining ko'zini toliqtiradi.
Kamera yengil va silliq kinoeffekt bilan har freymda masofaning 8% qismini bosib o'tadi.
Ko'rish Qoidasi: O'yinchi Oldidagi Yo'lni Ko'rishi Shart
Agar o'yinchi 50% markazda bo'lsa, u oldindagi yo'lning faqat yarmini ko'radi. Katta tezlikda jarlikka qulab tushish xavfi juda yuqori!
Klassik o'yinlarda qahramon ekranning 25%–30% chap tomoniga qo'yiladi. Natijada ekranning 70%+ maydoni oldindagi to'siqlarni ko'rishga qoladi!
Parallaks: 2D O'yinda 3D Fazoviy Chuqurlik Illyuziyasi
| Qatlam | Siljish tezligi | Vizual mazmun |
|---|---|---|
| Дальний план (Distant) | cameraX * 0.05 |
Osmon, yulduzlar, oy (deyarli harakatsiz) |
| Средний план (Midground) | cameraX * 0.35 |
Kiber shahar osmono'par binolari, chiroqlar |
| Передний план (Foreground) | cameraX * 1.00 |
Platformalar, kristallar, qahramon (to'liq tezlik) |
Procedural Dunyo: Platformalar Yugurish Davomida Yaratiladi
Platformalar orasidagi jarlik tasodifiy 1000 px bo'lishi mumkin emas! U o'yinchining sakrash formulasiga mos cheklanadi: `maxGap = vx * airTime`. Aks holda o'yinni o'tib bo'lmaydi!
Culling: O'tmishni O'chirish Barqaror 60 FPS Garovidir
5000 metr yugurgandan so'ng, orqada 300+ platforma va 500+ kristall qolib ketadi. Dvigatel 2 kilometr orqada qolgan narsalarni ham hisoblab qotadi!
Cheksiz Yuguruvchi Dvigatelining To'liq Zanjiri
player.x += vx; vy += g;
Platformalarga AABB qo'nish.
cameraX += (target - cam) * 0.08
Silliq kuzatish.
Oldinda yangi platforma yasash, orqadagilarni splice qilish.
Parallaks foni + ctx.translate(-cameraX, 0).
Infinite Cyber Runway: Dunyo Parametrlarini Sinovdan O'tkazish
- Brauzerda
lab/index.htmltrenajyorini oching. - Lerp = 1.0 (qattiq) va Lerp = 0.08 (silliq) farqini sinab ko'ring.
- Dunyo to'rini va kamera markaz chizig'ini yoqib ko'ring.
- 500 metrdan ko'proq masofaga yugurib, 20 ta kristall to'plang!
Orqada qolgan platformalar o'chirilgani sari "Tozalangan (GC)" soni o'sib borishini va FPS barqaror 60 da turishini kuzating!
10 Ballik Baholash Mezoni
- ScreenX hisobi xatosiz topilgan.
- Lerp mohiyati to'g'ri tushuntirilgan.
- Parallaks nisbatlari va culling sharti to'g'ri.
- Hisoblash to'g'ri.
- Parallaks yoki cullingda 1 ta xatolik bor.
- Varaqa to'ldirilgan.
- Faqat hisoblash bajarilgan.
- Nazariy savollar chala.