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

თუ ვებფილტრს იყენებთ, დარწმუნდით, რომ *.kastatic.org და *.kasandbox.org დომენები არ არის დაბლოკილი.

ძირითადი მასალა

ჩხირების ნგრევა

გვყავს მხტუნავი თახვი, გვაქვს ეკრანზე ნაჩვენები ჯოხები — ახლა ორივე უნდა გავაერთიანოთ. როდესაც თახვი ჯოხს მიახტება, ჩვენ ეს უნდა გავიგოთ, რათა ის ჩავთვალოთ ჯოხის წარმატებულ აღებად. ეს ნიშნავს, რომ უნდა გავაკეთოთ ორი ობიექტის შეხების (კოლიზიის) მარტივი შემოწმება. ბევრ ადგილზე შეგვიძლია ამ ფუნქციონალის დაპროგრამება, რადგან ის ორი ობიექტით მოქმედებს — შეგვეძლო, დაგვეპროგრამებინა გლობალურ ფუნქციად, Stick (ჯოხის) ობიეტზე მეთოდად, Beaver (თახვის) ობიექტზე მეთოდად. ამ მომენტისთვის, მივამაგროთ ის თახვის ობიექტს:
Beaver.prototype.checkForStickGrab = function(stick) {
  // თუ თახვი ჯოხზეა, გააკეთე რამე
};
ამ ფუნქციაში უნდა დავწეროთ პირობა, რომელიც ჭეშმარიტი იქნება იმ შემთხვევაში, თუ თახვი და ჯოხი ერთმანეთს შეეჯახა, წინააღმდეგ შემთხვევაში კი — მცდარი. შეგვიძლია, ის რთულად გამოვთვალოთ, მაგალითად თახვის ხელის ადგილმდებაროების მიხედვით, მაგრამ, მოდით, ჯერ მარტივად ვცადოთ. ისინი უნდა „შეეჯახონ“, თუკი:
  • ჯოხის ცენტრის x მდებარეობა არის თახვის ორ გვერდს შორის.
  • ჯოხის ცენტრის y მდებარეობა არის თახვის უკიდურეს ზედა და ქვედა წერტილებს შორის.
ჯოხი იხატება rect ბრძანების გამოყენებით, ამიტომ, ზოგადად, ეს ნიშნავს, რომ მისი x და y თვისებები წარმოადგენს მის ზედა მარცხენა კუთხის კოორდინატებს. მიუხედავად ამისა, ჩვენი შეჯახების გამოთვლის გასამარტივებლად, შეგვიძლია, გადავიდეთ რეჟიმში, რომელშიც rect იხატება ცენტრიდან:
rectMode(CENTER);
rect(this.x, this.y, 5, 40);
თახვის სურათიც საწყისად იხატება ზედა მარცხენა კუთხიდან, მაგრამ ჩვენ დავრჩებით ამ რეჟიმში, რადგან ეს ჩვენი გამოთვლისთვის მოსახერხებელია. x მდებარეობაზე პირველი პირობის შესამოწმებლად შეგვიძლია, გავაკეთოთ შემოწმება, რომელშიც ვამოწმებთ, არის თუ არა ჯოხის x მეტი ან ტოლი თახვის მარცხენა გვერდზე (x-ზე) და ნაკლები ან ტოლი თახვის მარჯვენა გვერდზე (x+40-ზე)
stick.x >= this.x && stick.x <= (this.x + 40)
y მდებარეობის შესამოწმებლად შეგვიძლია, ანალოგიური შემოწმება გავაკეთოთ, სადაც ვხედავთ, არის თუ არა ჯოხის y-ი თახვის ზედა ნაწილზე (y-ის) მეტი ან ტოლი და - ნაკლები ან ტოლი თახვის ქვედა ნაწილზე (y+40-ის):
stick.y >= this.y && stick.y <= (this.y + 40)
ახლა რა უნდა ვქნათ, როცა დავადგინეთ შეჯახება თახვსა და ჯოხს შორის? ჩვენ გვინდა, ეფექტურად მოვაშოროთ ჯოხი ეკრანიდან და დავიცვათ ის შემდეგი შეჯახებისგან. ამის გაკეთების ერთ-ერთი მარტივი გზაა ჯოხის ეკრანიდან გატანა მისი კოორდინატის ცვლილებით:
stick.y = -400;
ამავდროულად, გვინდა, დავიმახსოვროთ, რამდენი ჯოხი „აიღო" თახვმა, ამიტომ უნდა გავზარდოთ შიდა ჯოხების თვისება:
this.sticks++;
საბოლოოდ, ეს მეთოდი უნდა გამოვიძახოთ საჭირო დროს — იქნებ მას შემდეგ, როგორც კი თითოეულ ჯოხს დავხატავთ?
    for (var i = 0; i < sticks.length; i++) {
        sticks[i].draw();
        beaver.checkForStickGrab(sticks[i]);
        sticks[i].x -= 1;
    }
აი, ყველაფერი ერთად - შეამოწმეთ, როდესაც ჯოხზე გადახტებით, ის გაქრება!

გსურთ, შეუერთდეთ დისკუსიას?

პოსტები ჯერ არ არის.
გესმით ინგლისური? დააწკაპუნეთ აქ და გაეცანით განხილვას ხანის აკადემიის ინგლისურენოვან გვერდზე.