Atölye › Bomberman Tarzı Arena › 38/42. adım
Telefonda ok tuşu yok; ama doğal bir kontrol var: parmağını oyuncunun gitmek istediğin yanına koy. touch
fonksiyonu parmağı oyuncunun merkeziyle karşılaştırır ve bir ok tuşunun adını döndürür: 'ArrowRight' gibi.
Parmak oyuncunun üstündeyse null döndürür; bu bomba demek olacak.
Cevabın tuş adı olması işin püf noktası: bir sonraki adımda dokunuş, klavyenin doldurduğu aynı held listesini
dolduracak ve geri kalan her şey olduğu gibi çalışacak.
```js
// Touch: hold a finger on one side of the player to walk that way; tap on the player to drop a bomb.
function touch(event) {
const rect = canvas.getBoundingClientRect()
const x = ((event.clientX - rect.left) * canvas.width) / rect.width
const y = ((event.clientY - rect.top) * canvas.height) / rect.height
const dx = x - (player.x * TILE + TILE / 2)
const dy = y - (TOP + player.y * TILE + TILE / 2)
if (Math.abs(dx) < TILE / 2 && Math.abs(dy) < TILE / 2) return null
if (Math.abs(dx) > Math.abs(dy)) return dx > 0 ? 'ArrowRight' : 'ArrowLeft'
return dy > 0 ? 'ArrowDown' : 'ArrowUp'
}
```canvas.getBoundingClientRect() → canvas'ın sayfadaki yeri ve ekranda göründüğü boy. Canvas ekranda küçültülmüş
olabilir.((event.clientX - rect.left) * canvas.width) / rect.width → parmağın ekrandaki yerini canvas pikseline
çevirir: canvas'ın solundan uzaklık × (gerçek en / görünen en).const dx = x - (player.x * TILE + TILE / 2) → parmak oyuncunun merkezinden ne kadar sağda (eksiyse solda). dy
ne kadar aşağıda (eksiyse yukarıda).if (Math.abs(dx) < TILE / 2 && Math.abs(dy) < TILE / 2) return null → ikisi de yarım kareden küçükse parmak
oyuncunun üstünde: null.if (Math.abs(dx) > Math.abs(dy)) → yatay fark büyükse eksen yatay: dx > 0 ise sağ, değilse sol.dy > 0 ise aşağı, değilse yukarı.function drawCircle( satırının üstüne yorumu ve touch fonksiyonunu yaz.Beceriler: Klavye ve fare girdisi
← Güçleri göster Parmakla oyna →