Atölye › Yazı Yağmuru › 32/33. adım
Ekrandaki tuşa dokunmak o harfi yazsın. Dokunuş da gerçek klavyeyle aynı type(key)'i çağıracak; böylece
kilitlenme, hatalar, puan her şey iki yolda da aynı çalışır. Oyun bittikten sonra bir dokunuş yeniden başlatsın.
```js
canvas.addEventListener('pointerdown', (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
if (state === 'over') return reset()
ROWS.forEach((keys, row) => {
for (let i = 0; i < keys.length; i++) {
const k = keyRect(row, i)
if (x >= k.x && x < k.x + KEY_W && y >= k.y && y < k.y + KEY_H) type(keys[i])
}
})
})
ctx.fillText('Press Enter or tap to play again', canvas.width / 2, 205)
```canvas.addEventListener('pointerdown', ...) → canvas'a fareyle ya da parmakla basıldığında.canvas.getBoundingClientRect() → canvas'ın sayfadaki kutusu: left, top (kenarları), width, height
(ekranda göründüğü boy).((event.clientX - rect.left) * canvas.width) / rect.width → event.clientX dokunuşun sayfadaki yeri. Önce
canvas'ın kenarını çıkarırız, sonra ekran pikselini canvas pikseline çeviririz (telefonda canvas küçültülmüş
olabilir). y için aynısı.if (state === 'over') return reset() → oyun bittiyse yeniden başlat.keyRect. x >= k.x && x < k.x + KEY_W && ... → nokta bu tuşun
kutusunun içinde mi? İçindeyse type(keys[i]).function draw() { satırının üstüne pointerdown dinleyicisini yaz; altında bir boş satır kalsın.'Press Enter or tap to play again' yap.Beceriler: Klavye ve fare girdisi
← Sıradaki tuşu yak Kendin yap: fikir değiştir →