If you're seeing this message, it means we're having trouble loading external resources on our website.

Bağlandığınız bilgisayar bir web filtresi kullanıyorsa, *.kastatic.org ve *.kasandbox.org adreslerinin engellerini kaldırmayı unutmayın.

Ana içerik

Sopa çarpışmaları

Kunduz hopluyor, bagetler çalıyor - sadece ikisini bir araya getirmemiz gerekiyor. Kunduzumuz sopanın üstüne gelir gelmez haberimiz olsun istiyoruz, böylece bunu başarılı bir sopa yakalama olarak sayabiliriz. Bunun anlamı, iki nesne için temel bir çarpışma kontrolüne bakmamız gerektiğidir. Bu işlevsellik iki nesneyle ilgili olduğu için, birçok yere programlayabiliriz - genel bir fonksiyon, Stick nesnesinde bir yöntem, Beaver nesnesinde bir yöntem. Şimdilik kunduza yapıştıralım:
Beaver.prototype.checkForStickGrab = function(stick) {
  // eğer kunduz bir şeyin üstündeyse, bir şeyler yapın
};
Bu birinci fonksiyonda, kunduz ve sopa çarpıştığında doğru olan, ve başka türlü yanlış olan bir koşul kullanmamız gerekir. Örneğin, kunduzun elinin konumuna göre, bunu daha karmaşık veya katı yapabiliriz, ama şimdilik temelde kalalım. Şöyle olursa, "çarpışmaları gerekir":
  • Sopanın orta x konumu, kunduzun iki yanı arasındadır.
  • Sopanın orta y konumu, kunduzun üst ve altının arasındadır.
Sopa rect komutu kullanılarak çizilmiştir, yani, genellikle bu, x ve y özelliklerinin sol üst koordinatlarını gösterdiği anlamına gelir. Ancak, çarpma hesaplamalarını sadeleştirmek için, rect'in merkezden çizildiği bir moda dönebiliriz:
rectMode(CENTER);
rect(this.x, this.y, 5, 40);
Kunduzun görüntüsü de ön tanımlı olarak sol üst köşeden çizilir, ama bu modu tutacağız, çünkü hesaplamamızda işe yarar. x konumundaki birinci konumu kontrol etmek için, şöyle bir kontrol yapabiliriz, x sopasının kunduzun sol tarafına (x) eşit veya büyük olduğunu ve kunduzun sağ tarafına (x + 40) eşit veya küçük olduğunu kontrol ederiz
stick.x >= this.x && stick.x <= (this.x + 40)
y konumunu kontrol etmek için, buna benzer bir kontrol yapabiliriz, burada sopanın kunduzun üstünden (y) büyük veya eşit ve kunduzun altından (y+40) küçük veya eşit olduğunu görürüz:
stick.y >= this.y && stick.y <= (this.y + 40)
Şimdibir kunduz ve sopanın arasında bir çarpışma fark edersek, ne yapmalıyız? Sopayı ekrandan kaldırmak ve daha fazla çarpmayı engellemek istiyoruz. Bunu yapmanın kolay bir yolu, y koordinatını değiştirerek sopayı ekranın dışına atmaktır:
stick.y = -400;
Aynı zamanda kunduzun kaç sopa "yakaladığını" hatırlamak istiyoruz, onun için iç sopa özelliğini artıracağız:
this.sticks++;
Son olarak, bu yöntemi tam zamanında çağırmamız gerekiyor- her bir sopayı çektikten hemen sonrası nasıl olur?
    for (var i = 0; i < sticks.length; i++) {
        sticks[i].draw();
        beaver.checkForStickGrab(sticks[i]);
        sticks[i].x -= 1;
    }
Şimdi hepsini birlikte görebilirsiniz - bakın, sopaların üstünden atladığınızda, kayboluyorlar!

Tartışmaya katılmak ister misiniz?

Henüz gönderi yok.
İngilizce biliyor musunuz? Khan Academy'nin İngilizce sitesinde neler olduğunu görmek için buraya tıklayın.