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

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

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

გაცოცხლებული სცენები

ჩვენ ვნახეთ, როგორ უნდა გავაკეთოთ რამდენიმე მარტივი სცენა, მაგრამ ჩვენი სცენები იყო „სტატიკური" — ისინი არ იყო ანიმირებული და არც მომხმარებელის ინტერაქციაზე რეაგირებდა. როგორც ვნახავთ, უფრო მაგარი სცენების შექმნას მეტი დახვეწილობა ესაჭიროება. მაგრამ, ჰეი, მოდით, გავხდეთ მაგრები!
ჯერ ანიმაციაზე ვილაპარაკოთ. ვინსტონის როკვარსკვლავობისას მისი დრამერობა ხომ არ გვეჩვენებინა? ამას გავაკეთებდით draw ფუნქციის განსაზღვრით, რათა შემდეგ მასში ჩაიწეროს კოდი, რომელიც ხატავს ფიგურებს, რომლებიც მდებარეობას ოდნავ იცვლიან ყოველ კადრში. აი, მაგალითი, რომელშიც დრამერის ხელების მდებარეობა ეფუძნება მიმდინარე millis()-ის მნიშვნელობას — გასული მილიწამების რაოდენობას:
რა მოხდება, თუ მას დავამატებთ სცენა 4-ად ჩვენს წინა მაგალითს? კოდს გადავიტანთ drawScene4() ფუნქციაში და შევცვლით ჩვენს mouseClicked-ის ლოგიკას.
var drawScene4 = function() {
    currentScene = 4;
    background(194, 255, 222);

    var x = cos(millis()*1); 
    var y = cos(millis()+98);

    ...
 };

 mouseClicked = function() {
    if (currentScene === 1) {
        drawScene2();
    } else if (currentScene === 2) {
        drawScene3();
    } else if (currentScene === 3) {
        drawScene4();
    } else if (currentScene === 4) {
        drawScene1();
    }
};
სცადეთ ის ქვემოთ – დააწკაპუნეთ რამდენჯერმე:
შეამჩნიეთ რაღაც? ამან იმუშავა, მაგრამ არც ისე კარგად. ვხედავდით ვინსტონს თავის ბარაბანთან ერთად, მაგრამ მისი ბარაბნის ჯოხები არ მოძრაობდნენ. რა ცუდია! რთულია, მუსიკის შექმნა, როცა დროში გაყინული ხარ. შეიძლება, უკვე მიხვდით შეცდომას: ჩვენ აღარ ვიძახებთ ბარაბნის ჯოხების დამხატავ კოდს draw()-ში, ასე რომ, ის გამოძახებულია მხოლოდ ერთხელ და არა — ხშირად. შესაბამისად, ჯოხები რენდერდება მხოლოდ მაშინ, როცა პირველად ვიძახებთ მას. ალბათ, უკვე მიხვდით გამოსავალსაც: განვსაზღვროთ draw() ფუნქცია და გამოვიძახოთ drawScene4() შესაბამის დროს.
draw = function() {
    if (currentScene === 4) {
        drawScene4();
    }
};
მოდით, ერთხელაც დავფიქრდეთ ამაზე: როდესაც განვსაზღვრავთ draw() ფუნქციას ჩვენს კოდში, შემდეგ ის გამოძახებული იქნება განმეორებითად (ნაგულისხმევია 60 კადრი წამში) და ყოველი გამოძახებისას, როცა მიმდინარე სცენა უკვე დაყენებულია 4-ზე, შემდეგ ის გამოიძახებს მეოთხე სცენის დამხატავ ფუნქციას. როდესაც ის ნებისმიერი სხვა მნიშვნელობაა, ის არ ცდის არაფრის დახატვას და შეინარჩუნებს იმას, რაც უკვე იყო ეკრანზე. ჩვენ მაინც გვაქვს გასაკეთებელი თავდაპირველი სცენის დახატვა mouseClicked-ში, ეს ლოგიკა მხოლოდ მომდევნო კადრების ანიმირებაზე ზრუნავს.
შესაძლოა, ზოგი თქვენგანი ფიქრობდეს: რატომ არ გვაქვს ლოგიკა, რომელიც იძახებს სცენის დამხატავ ყველა ფუნქციას draw()-ში? ცხადია, ამის გაკეთება შეგიძლიათ და ეს ნიშნავს, რომ თუ დაამატებდით ანიმაციას ყველა სხვა სცენას, მაშინ ისინი უმალვე იმუშავებდნენ. მაგრამ იმის გათვალისწინებით, რომ თქვენ სხვა სცენებს არ უკეთებთ ანიმირებას, ეს ნიშნავს, რომ თქვენ კომპიუტერს ამ სცენებს განუწყვეტლივ ხელახლა ახატინებთ უმიზეზოდ. მუშაობის ეფექტურობის მხრივ ეს კარგი არ არის. თუ ვიცით, რომ შეგვიძლია, იოლად გადავარჩინოთ კომპიუტერი ზედმეტი მუშაობისგან, მაშინ ასე უნდა მოვიქცეთ. ეს აასწრაფებს ჩვენს პროგრამებს და გააბედნიერებს ჩვენს მომხმარებლებს.
კარგი, ახლა, როცა უკვე ეს ყოველივე განვიხილეთ, აი, ისტორია, თავისი დაწკაპუნებადი, ანიმირებული დიდებით. ცოტაც და სცენა 4-იდან გამოსულ გულისცემას იგრძნობთ!

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

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