Skip to content

Latest commit

 

History

History
103 lines (69 loc) · 3.04 KB

File metadata and controls

103 lines (69 loc) · 3.04 KB

Prompt 1:

  • javascripte bir delta değişkeni tanımlayacam bu fps den bağımsız olmalı. ancak benim pc 60 fps bende bu değerin 1e yakın olması gerek nasıl yapabilirim

Cevap: FPS’ten bağımsız “delta” için en doğru yaklaşım frame süresini saniye cinsinden ölçmek ve bunu kullanmaktır.

Ama senin istediğin şey biraz özel: 👉 60 FPS’de yaklaşık 1 olsun istiyorsun.

O zaman standart çözüm şu:

✅ 60 FPS normalize delta (en pratik) let lastTime = 0; let delta = 1;

function gameLoop(time) { const dt = time - lastTime; // ms lastTime = time;

// 60 FPS'e normalize (16.67ms = 1 frame)
delta = dt / (1000 / 60);

update(delta);
render();

requestAnimationFrame(gameLoop);

}

requestAnimationFrame(gameLoop);


Prompt 2:

  • bir .js oyunu yaptım arkaplan müziğini (loop) nasıl çalabilirim oyunda

Cevap: En temiz yöntem Audio objesi kullanmak.

Basit örnek:

// music.js

const bgMusic = new Audio("./assets/audio/background.mp3");

bgMusic.loop = true; // sürekli tekrar etsin bgMusic.volume = 0.5; // ses seviyesi

Oyunda başlatmak için:

bgMusic.play();

Ama tarayıcılar kullanıcı etkileşimi olmadan sesi engeller. Bu yüzden genelde bir tuş veya click sonrası başlatılır.

Örnek:

window.addEventListener("click", () => { bgMusic.play(); }, { once: true });

Bu sayede kullanıcı ilk tıklamada müzik başlar ve loop eder.


Prompt 3:

  • export function drawLighting(ctx, player_, canvas) { // 1) karanlık layer ctx.save(); ctx.fillStyle = "rgba(0, 0, 0, 0.85)"; ctx.fillRect(0, 0, canvas.width, canvas.height); // 2) ışık maskesi ctx.globalCompositeOperation = "destination-out"; const gradient = ctx.createRadialGradient( player_.x, player_.y, 20, player_.x, player_.y, 180 ); gradient.addColorStop(0, "rgba(0,0,0,1)"); gradient.addColorStop(1, "rgba(255, 255, 255, 0)"); ctx.fillStyle = gradient; ctx.beginPath(); ctx.arc(player_.x, player_.y, 180, 0, Math.PI * 2); ctx.fill(); // 3) compositing reset ctx.globalCompositeOperation = "source-over"; ctx.restore(); } bu kodda oyuncu çevresini karanlık yapan kod hangisi

Cevap: Bu kodda oyuncunun çevresini karartan (yani “darkness” efekti oluşturan) kısım aslında ilk adım:

ctx.fillStyle = "rgba(0, 0, 0, 0.85)"; ctx.fillRect(0, 0, canvas.width, canvas.height); Ne yapıyor? Tüm canvas’ı yarı saydam siyah bir katmanla kaplıyor Bu yüzden ekran tamamen karanlık görünüyor Ama “oyuncu çevresinin açılması” nerede?

Asıl kritik kısım şu:

ctx.globalCompositeOperation = "destination-out";

ve bunun ardından gelen:

ctx.arc(player_.x, player_.y, 180, 0, Math.PI * 2); ctx.fill(); Bu ne yapıyor? “destination-out” modu şunu yapar: Çizdiğin şekli ekrandan siler Yani burada: Oyuncunun etrafına bir daire çiziyorsun Bu daire siyah katmanı “deliyor” Böylece ışık alanı oluşuyor Özet

🔳 Karanlık yapan kısım:

fillRect(0, 0, canvas.width, canvas.height)

💡 Işığı oluşturan (karanlığı açan) kısım:

globalCompositeOperation = "destination-out" arc(...) fill()