Atölye › Mario Tarzı Platform › 8/37. adım
Oyuncuya bir hız veriyoruz: vx yatay, vy dikey hız (piksel/kare). Yerçekimi her karede vy'ye biraz ekler;
böylece düşüş gittikçe hızlanır. Ama sınırsız değil: en fazla MAX_FALL.
Döngüye bir iş daha ekliyoruz: her turda önce güncelle (update), sonra çiz. Oyuncunun güncellemesini ayrı bir
fonksiyona, updatePlayer'a koyuyoruz; ileride düşmanlar da kendi fonksiyonlarını alacak.
```js
const GRAVITY = 0.5
const MAX_FALL = 12 // must stay below TILE, or a fast fall could skip over a whole tile
if (line[col] === 'P') player = { x: x + 4, y: y + 2, w: 24, h: 30, vx: 0, vy: 0, grounded: false }
function updatePlayer() {
player.vy = Math.min(MAX_FALL, player.vy + GRAVITY)
player.y += player.vy
}
function update() {
updatePlayer()
}
update()
```GRAVITY = 0.5 → her karede düşme hızına eklenen miktar.MAX_FALL = 12 → en büyük düşme hızı. Yorum nedenini söylüyor: bir karede bir döşemeden (32) fazla ilerleyen cisim
ince bir zeminin içinden geçip gidebilir; bunu önlemek için hız 32'nin altında kalmalı.vx: 0, vy: 0, grounded: false → oyuncunun yatay ve dikey hızı ve "yerde mi?" bilgisi.player.vy = Math.min(MAX_FALL, player.vy + GRAVITY) → hıza yerçekimini ekle. Math.min iki sayıdan küçüğünü
seçer: sonuç 12'yi hiç geçemez.player.y += player.vy → oyuncuyu hızı kadar aşağı taşı.function update() { updatePlayer() } → oyunun bütün güncellemesi; şimdilik yalnız oyuncu.loop içinde update() → her karede önce güncelle, sonra çiz.COLORS satırının altına bir boş satır bırak; GRAVITY ve MAX_FALL satırlarını yaz.loadLevel içindeki oyuncu nesnesine vx: 0, vy: 0, grounded: false ekle (h: 30'dan sonra).function draw() { satırının üstüne updatePlayer ve update fonksiyonlarını yaz.loop içinde draw()'un üstüne update() yaz.Beceriler: Hız ve yerçekimi, Oyun döngüsü
← Oyuncuyu çiz Döşemelere inmek →