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

Եթե գտնվում ես վեբ զտիչի հետևում, խնդրում ենք համոզվել, որ *.kastatic.org և *.kasandbox.org տիրույթները հանված են արգելափակումից։

Հիմնական նյութ

Փայտիկի բախումներ

Այժմ ունենք թռչկոտող կուղբ ու փայտիկներ և պետք է ընդամենը միացնել այս երկուսը: Հարկավոր է իմանալ, թե երբ է կուղբը անցնում փայտիկի վրայով, որպեսզի դիտարկենք դա որպես փայտիկի հաջողված հափշտակում: Սա նշանակում է, որ պետք է երկու առարկաների միացման տարրական ստուգում կատարենք: Այս ֆունկցիոնալությունը ծրագրավորելու տարբեր տեղեր կան, քանի որ գործ ունենք երկու առարկայի հետ՝ որպես գլոբալ ֆունկցիա, որպես «Փայտիկ» առարկայի մեթոդ, որպես «Կուղբ» առարկայի մեթոդ: Արի առայժմ միացնենք այն կուղբին:
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 + 40):
stick.y >= this.y && stick.y <= (this.y + 40)
Իսկ ի՞նչ պետք է անել հիմա, երբ արդեն հայտնաբերել ենք բախում կուղբի և փայտիկի միջև: Մեր նպատակն է հեռացնել փայտիկն էկրանից և կանխել հետագա բախումները: Փայտիկն էկրանից կարելի է հեռացնել, օրինակ, փոխելով նրա y կոորդինատը:
stick.y = -400;
Կարևոր է նաև հիշել, թե քանի փայտիկ է հավաքել կուղբը՝ փայտիկների ներքին հատկությունը 1-ով մեծացնելու համար:
this.sticks++;
Եվ վերջում՝ պետք է առաջին իսկ հնարավորության դեպքում կանչել այս մեթոդը. ի՞նչ կասես, եթե անենք դա յուրաքանչյուր փայտիկ նկարելուց հետո:
    for (var i = 0; i < sticks.length; i++) {
        sticks[i].draw();
        beaver.checkForStickGrab(sticks[i]);
        sticks[i].x -= 1;
    }
Ահա և վերջնական տարբերակը: Կարող ես փորձարկել այն: Նկատեցի՞ր, որ երբ ցատկում ես փայտիկների վրայով, դրանք անհետանում են:

Ուզո՞ւմ ես միանալ խոսակցությանը։

Առայժմ հրապարակումներ չկան։
Անգլերեն հասկանո՞ւմ ես: Սեղմիր այստեղ և ավելի շատ քննարկումներ կգտնես «Քան» ակադեմիայի անգլերեն կայքում: