ვისწავლეთ მასივის შექმნა და მასზე წვდომა.
მასივის მნიშვნელოვანი თვისებაა მისი დინამიურობა პროგრამის მიმდინარეობისას.
ახლავე გიჩვენებთ ამაში რას ვგულისხმობ.
აქ გვაქვს პროგრამა, რომელიც გვიჩვენებს ბუშტებიანი ჰოპერის გამოსახულებას.
გვაქვს xPositions მასივი, რომელიც შეიცავს ინფორმაციას ორივე ბუშტის მდებარეობაზე.
აქ კი გვაქვს ციკლი, რომელიც მასივის ყველა ელემენტს გაივლის.
თითოსთვის, ის x-დან ჰოპერის ხელამდე ხაზს, x-ზე კი 30x40 ზომის ოვალს - ბუშტს ხატავს.
ესეიგი თუ მეტი ბუშტი გვინდა, საკმარისია მასივს რიცხვები დავუმატოთ, მაგალითად, 300.
მშვენიერია, ახლა ჰოპერს სამი ბუშტი აქვს.
ვთქვათ, გვსურს პროგრამირებაში გამოუცდელს მივცეთ ახალი ბუშტების დამატების საშუალება,
ისე, რომ სადაც მომხმარებელი დააკლიკებს ეკრანს მაუსით, ბუშტი გაჩნდეს.
მგონი ძალიან მაგარი იქნება.
როგორ შეიძლება ეს მოვახერხოთ? გვინდა რომ ჩვენი პროგრამა დროში იცვლებოდეს, არა?
მომხმარებლის ყოველ დაკლიკებაზე ბუშტი უნდა გაჩნდეს.
გადავიტანოთ ყველაფერი ხატვის ფუნქციაში რომ დროში ცვლა მარტივი გახდეს.
ესეიგი ამას აქ ჩამოვიტანთ და გამოვყოფთ.
ახლა გვინდა იმის შემოწმება, აწვება თუ არა მომხმარებელი მაუსს ზუსტად ახლა.
ეს "if"-ით შეგვიძლია. if(mouselsPressed) და შემდეგ კიდევ რაღაც.
რა უნდა გავაკეთოთ? თუ მაუსს აწვებიან, როგორმე ამ მასივს რიცხვი უნდა დავუმატოთ.
ისევ ორელემენტიანი იყოს.
ესეიგი გვინდა როგორმე ამ მასივს რიცხვი დავუმატოთ. მე ამის ერთ გზას გიჩვენებთ.
შეგვიძლია დავწეროთ xPositions[2] = mouseX;
კარგი, ახლა გიჩვენებთ რომ ეს მართლაც მუშაობს.
დავაკლიკე და ესეც ასე, ბუშტიც მივიღე. რა გააკეთა ამ ჩანაწერმა?
xPositions[2] პოულობს მასივის ადგილ 2-ზე მყოფ ელემენტს, რომელიც რეალურად მესამეა.
თუ დაუკვირდებით, მესამე ადგილი თავისუფალია, იქ არაფერია.
ამიტომ, ჯერ ვპოულობთ ამ ადგილს და შემდეგ მასში ვათავსებთ mouseX-ს.
რადგან მანამდე აქ არაფერია, ახლა ამ ადგილის მნიშვნელობა mouseX გახდება.
ჩვენი მასივი ახლა სამ რიცხვს შეიცავს და ციკლი მესამე ბუშტსაც დახატავს.
ძალიან კარგი, კიდევ დავაკლიკებ რომ ნახოთ როგორ მუშაობს.
როგორც ხედავთ, ყოველი დაკლიკებისას ხატავს მესამე ბუშტს იქ, სადაც ვაკლიკებ.
ეს იმიტომ, რომ ადგილ 2-ს მუდმივად ახალ მნიშვნელობას ვანიჭებთ,
მნიშვნელობად ვწერთ ახალ mouseX-ს.
გვექნება მხოლოდ სამი ბუშტი, ერთი 0-ში, ერთი 1-ში და ერთიც, რომელსაც ვცვლით, 2-ში.
ეს უკვე ძალიან მაგარია, მაგრამ ჩვენ გვსურს მომხმარებელს ბევრი ბუშტი დავახატვინოთ,
ანუ ყოველ დაკლიკებაზე ახალი ბუშტი ჩნდებოდეს.
ესეიგი, ყოველ დაკლიკებაზე უნდა ვზრდიდეთ მასივის ელემენტების რაოდენობას.
ანუ სულ 2-ის მაგივრად, შემდეგ დაკლიკებაზე გვექნება 3, შემდეგ 4, 5, 6 და ა.შ.
ამისთვის შეგვიძლია მთვლელი ცვლადი შევქმნათ. დავწეროთ newInd = 2;
აქ 2-ის ნაცვლად newInd-ს დავწერთ და ბოლოს საჭირო იქნება newInd++;
ასე ამ ცვლადს ყოველ ჯერზე დავუმატებთ ერთს. ჯერ იქნება 2, შემდეგ 3, შემდეგ - 4.
ესეიგი ეს ცვლადი ყოველ დაკლილებაზე გაიზრდება.
ესეც ასე! ბევრი ბუშტი. ბუშტების წვეულება!
მაგარია, მაგრამ ეს არაა საუკეთესო გზა, რადგან მასივის ზრდა ბევრჯერ მოგვიწევს.
ამ ეფექტის მისაღწევად უფრო მარტივი გზაც არსებობს.
ეს ყველაფერი არ გვჭირდება.
დავწეროთ xPositions.push და შემდეგ mouseX.
ამ მეთოდს xPositions მასივისთვის ვიძახებთ.
ეს ბრძანება მასივს ეუბნება რომ ახალი mouseX მნიშვნელობა დაამატოს თავის ბოლოში.
ყოველ დაკლიკებაზე ეს ბრძანება ახალ mouseX ცვლადს მასივში დაამატებს.
ასე რომ მასივი ყოველ ჯერზე უფრო და უფრო გაიზრდება.
იმუშავა! და ამისთვის წინანდელზე გაცილებით ნაკლები კოდი დაგვჭირდა.
უმეტესად ჯობს push გამოიყენოთ როცა მასივისთვის ელემენტების დამატება გსურთ.
ეს მოსახერხებელი მეთოდია მასივების ასაზრდელად პროგრამის მიმდინარეობისას,
მაგალითად, როცა გვაქვს ანიმაცია, ან მომხმარებლები იყენებენ რამეს.
დაახლოებით გავიარეთ 90% იმისა, თუ რაში გამოიყენება მასივები,
თუმცა კიდევ მრავალი გამოყენება არსებობს მათთვის, შეგიძლიათ ეს ფორუმზე გაარჩიოთ.
მაგრამ სასურველია ჯერ საფუძვლებში გაიწაფოთ.