Jump to content

ვიდეო თამაშების კეთება Cocos2d-x, C++


Recommended Posts

თუ გაინტერესებთ თამაშების კეთება Cocos2d-x-ში, http://cocos2d-x.org/

პროგრამირების ენა C++.

შემიძლია გავაკეთო პატარა სასწავლო ბლოგი, C++-ის ძალიან ელემენტალური ცოდნა იქნება სასურველი, დანარჩენი იქ იქნება ახსნილი.

ოღონდ თამაშები იქნება 2D. :)

მაგრამ თუ 3D უფრო გხიბლავთ, მერე მარტივად გადახვალთ Unreal-ზე (C++) ან Unity3d-ზე (C#) ...

  • Upvote 1
Link to comment
Share on other sites

მე აუცილებლად დავინტერესდები და თუ გაკეთდება ეგეთი რამე სიამოვნებით შემოგიერთდებით... c++ საც ვსწავლობ და გრაფიკული სამუშაოებიც მეხერხება ცოტ-ცოტა

Link to comment
Share on other sites

კარგია თუ გააკეთებ. ნამდვილად ცოტაა ქართულად სასწავლი მასალა და ბევრი გამოჩნდება მსურველი. მეც ვისწავლი დიდი სიამოვნებით.

Link to comment
Share on other sites

ჰო მართლა კიდევ 2 პერსპექტიული ახალგაზრდაა, რომლებიც ზუსტად ამით არიან დაინტერესებული (C++ და თამაშები)  და აუცილებლად გამოადგებათ აღნიშნული ბლოგი.

Link to comment
Share on other sites

სალამი,

 

სანამ ბლოგზე გადავალთ, რამდენიმე პუნქტს ჩამოვწერ, თუ როგორ გავაკეთებთ პირველ თამაშს და რა დაგვჭირდება ამისთვის.

1. პროგრამა რაშიც ვიმუშავებთ: ვინც Windows-ზე ხართ დაგჭირდებათ Eclipse და ვინც Mac-ზე დაგჭირდებათ Xcode. ვისაც არ გიყენიათ ნუ იჩქარებთ დაყენებას, კიდევ დამატებით რამდენიმე პროგრამის დაყენება იქნება საჭირო და კონფიგურაცია. ეს ინფორმაცია დეტალურად დაიდება ბლოგზე.

 

2. პროექტი დაიდება GitHub-ზე, შეგეძლებათ პროექტში ნებისმიერ დროს ჩართვა.

 

3. სურათებისთვის და აუდიო ეფექტებისთვის გამოვიყენებთ შემდეგ ორ საიტს: https://openclipart.org/ და http://www.freesfx.co.uk/

 

4. რაც შეიძლება მეტი მასალა რომ ჩაეტიოს თამაშში, გვექნება რამდენიმე სცენა, პერსონაჟის მოძრაობისთვის კი გამოვიყენებთ accelerometer-ს, ასევე იქნება მოწინააღმდეგეები რომლებიც ramdom-ით იბოდიალებენ რუკაზე. თავიდან გვექნება 1 ტური, ხოლო შემდეგ დამატებით ტურებს შევყრით SQLite-ს ბაზაში და იქიდან ჩავტვირთავთ. (ვისაც გამოცდილება გაქვთ რომელიმე SQL-ან მაინც, მაშინ თქვენთვის არაფერი არ იქნება, რამდენიმე Select-ს, Insert-ს და Update-ს დავწერთ, ხოლო ვისაც არ გაქვთ გამოცდილება თქვენთვის პატარა შესავალს გავაკეთებთ თუ რა არის რელაციური ბაზა და როგორ ვინახავთ თითოეული ტურის პარამეტრებს ბაზაში).

 

5. და ბოლოს კომენტარები თვითონ კოდში იქნება ინგლისურ ენაზე, ხოლო ბლოგში ყველაფერი ქართულად. (რატომ ინგლისურად, თავიდან მე ლათინური ასოებით ვწერდი ქართულად, წელიწადზე მეტი იყო გასული და პროექტის სორსის დადება გადავწყვიტე ამ საიტებზე http://codecanyon.net/ http://www.chupamobile.com/ და ამის გამო მომიწია მთლიანი კოდის თავიდან გადარბენა და ინგლისურზე გადასწორება. დღეს შეიძლება თქვენ არ აპირებდეთ გაყიდვას ან უცხოელის პროექტში ჩართვას, მაგრამ ჯობს დასაწყისიდან მიეჩვიოთ. უბრალოდ რჩევაა. :) )

 

 

 

 

 

რაც შეეხება Unity3d-ს, თუ Cocos2d-x-დან მაგაზე გადახვალ მიხვდები რა მარტივია ცხოვრება. :) რამდენი რამე იქნება მზა, რისი კეთებაც აქ ხელით გიწევს.

  • Upvote 1
Link to comment
Share on other sites

კარგია ძალიან

 

P.S. unreal-ზე C#_ითაც შეიძლება უკვე მუშაობა. xamarin-ზე თუ გსმენიათ:

http://mono-ue.github.io/

Link to comment
Share on other sites

1. პროგრამა რაშიც ვიმუშავებთ: ვინც Windows-ზე ხართ დაგჭირდებათ Eclipse და ვინც Mac-ზე დაგჭირდებათ Xcode. 

linux_მა რა დააშავა? :( თანაც ორივეს ჯობია :D

 

sqlite-თან და mySQL-თან მაქვს პატარა გამოცდილება, select-ებს insert-ებს და Update-ბს ვხმარობდი (83 000 ცანაწერიანი ბაზა გამაკეთებინეს python-ს სკრიპტით)

 

სიამოვნებით ჩავერთვები მეც გამოცდილებასაც შევიძენ :)

Link to comment
Share on other sites

ერთიც და დავიწყებთ.

ყველა ობიექტს რაც ჩვენ თამაშში გვექნება ავღწერთ კლასებით. ეს იქნება როგორც თამაშის ყველა პერსონაჟი, ასევე სცენები და ბაზასთან წვდომა. ვინც კარგად არ იცით კლასები და მიმთითებლები ქვემოთ მოვიყვან ანალოგიას ფაილურ სისტემასთან და თუ რამე გაუგებარი იქნება შეგიძლიათ იკითხოთ.

როგორც იცით არსებობს პრიმიტიული ტიპები (int, float, char, bool, ...), ამ ტიპების ანალოგია გააკეთეთ სხვადასხვა ტიპის ფაილებთან. მაგ: int – txt, float – doc, char – zip და ა.შ. რადგანაც ჩვენ თამაშის მთავარ გმირს ვერ ავღწერთ მხოლოდ ერთ-ერთი პრიმიტიული ტიპით, მას აქვს ეკრანზე კორდინატები: float x, float y; აქვს ქულა: int point; არის რაღაც დონეზე: int level და ა.შ. ამიტომაც მის ასაღწერად ვიყენებთ კლასს, რომელიც არის რამდენიმე პრიმიტიული ტიპის ერთიანობა. (შეიძლება ერთი კლასი აერთიანებდეს რამდენიმე პრიმიტიულ ტიპს და ასევე სხვა კლასებსაც). ხოლო მისი ანალოგი ფაილურ სისტემასთან არის ფოლდერი, რომელშიც მოთავსებულია სხვადასხვა ტიპის ფაილები ან შეიძლება იყოს სხვა ფოლდერებიც. მაგ:

class Player
{
float x;
float y;
int point;
int level;
}

ეს არის ჩვენი ახალი ტიპი Player და მისი თითოეული ობიექტი Player p1, Player p2, Player p3... ხასიათდება ზემოთ მოყვანილი ოთხი პრიმიტიული ტიპით. ამის ანალოგი ფაილურ სისტემასთან გამოდის რომ თქვენ მაგალითად თითოეულ თანამშრომელს შეუქმნათ ფოლდერი p1, p2, p3... და მასში ჩააგდოთ 2 doc ფაილი და 2 txt ფაილი და ამით დაახასიათოთ ისინი. (იმედია აქამდე გასაგებია).

და როგორც თითოეულ ფაილს შეგვიძლია მივცეთ რაღაც უფლება ასევე შეიძლება კლასის ცვლადებს ქონდეთ უფლებები. ამისთვის გამოიყენება public, private და protected. (protected-ის მაგალითი ახლა მოყვანილი არ იქნება, მაგრამ თამაშში გამოვიყენებთ და იქ ავხსნით), ხოლო public, private პირდაპირაც ჩანს რასაც ნიშნავს: public-ის შემთხვევაში გარედან ცვლადებს მივმართავთ, ხოლო private-ს შემთხვევაში გარედან ვერ მივმართავთ. მაგ:

class Player
{
public:
float x;
float y;

private:
int point;
int level;
}

და კოდში აღწერილი Player p1-ზე შეგვიძლია ვიხმაროთ p1.x და p1.y, ხოლო არ შეიძლება p1.point და p1.level. და აქ შემოდის კლასის მეთოდები, რომლებიც ძალიან გავს ჩვეულებრივ ფუნქცია მაგრამ თვითონ კლასის შიგნით არის აღწერილი. მაგალითი (დავამატოთ ერთი მეთოდი):

class Player
{
public:
float x;
float y;
void setPoint(int p);

private:
int point;
int level;
}

რატომ ავიტკიეთ თავი, როცა მარტივად შეიძლებოდა ყველაფერი ყოფილიყო public.

int point; რომ ყოფილიყო public-ში მაშინ თამაშში ქულის მოპოვებისას დავწერდით p1.point += 10; სიტყვაზე 10 ქულა ავიღეთ და დავიმატეთ ძველ ქულაზე. (p1.point += 10; ეს იგივეა რაც p1.point = p1.point + 10;) მაგრამ თამაშში გაპარული შეცდომის ან ქსელური თამაშისას მოთამაშის მაიმუნობის შემთხვევაში ის 10 შეიძლება გახდეს სიტყვაზე 100000 და ჩვენ ვერანაირად ვერ დავბლოკავთ ესეთ შემთხვევას, ამიტომაც ვიყენებთ მეთოდს, რომელიც შეგვიძლია ასე დავწეროთ:

void Player::setPoint(int p)
{
if (p > MaxAvailablePoint)
CCLOG(“Cheating detected”);
else
point = p;
}

MaxAvailablePoint – მაქსიმალური ქულა რაც შეიძლება მოთამაშემ აიღოს.

ხოლო კლასის private ცვლადის გამოსატანად ვიხმართ მეორე მეთოდს int getPoint():

int Player::getPoint()
{
return point;
}

ეს რაც შეეხება კლასს და ახლა მიმთითებელი (pointer), უმეტესობა მიმთითებელს ჩვენ თამაშში ვიხმართ auto-ს, რომლის მეხსიერებიდან გათავისუფლება ჩვენ არ დაგვჭირდება, მაგრამ გამოვიყებენთ არა აუტო მიმთითებლებსაც. (თქვენ რომ მაგალითად სხვა თამაშის სორსს არჩევდეთ და იქ რომ შეგხვდეთ რომ იცოდეთ რა არის.) ასეთი მიმთითებლების წასაშლელად გამოვიყენებთ delete-ს. სპეციალურად დავუშვებთ რამდენიმე შეცდომას (delete-ს არ დავწერთ) და ვნახავთ რომ თამაშის დროს აპარატის ოპერატიული მეხსიერება ნელ-ნელა შევსებას დაიწყებს და თუ ასე თამაშს დიდხანს გავაგრძელებთ ბოლოს პროგრამა ავარიულად გამოირთვება.

ჩვენ გვაქვს კლასი Player და ვთქვათ შევქმენით ერთი ობიექტი მიმთითებლით Player *pp1 = new Player(); ამის ანალოგი ფაილურ სისტემასთან არის ფოლდერის shortcut.

დავუშვათ თითოეული (Player *pp1 = new Player();) ქმნის D დისკზე ფოლდერს თანამშრომლისთვის და დესკტოპზე აგდებს მის shortcut-ს. თანამშრომლის წასვლის შემთხვევაში მხოლოდ shortcut-ის წაშლისას D დისკი უცვლელი რჩება და საბოლოოდ გადაივსება (ბევრი თანამშრომლის მოსვლა-წასვლით). ხოლო ამისგან დასაცავად ვიყენებთ delete-ს. რომელიც ფაილური სისტემის ანალოგზე შლის თავად იმ ფოლდერს რასაც shortcut უთითებს.

 

სულ ესაა. :)

 

 

 

რაც შეეხება ლინუქსს მეც ძაან მომწონს, უბრალოდ მე არ მაქვს გამოცდილება android აპლიკაციის კეთების ლინუქსზე. თუ დაყენებით დააყენებთ იმ პროგრამებს რაც eclipse-ს დაჭირდება, მაშინ დამარჩენი იგივე იქნება. ინტერნეტში იქნება ბევრი რესურსი მაგაზე.

  • Upvote 3
Link to comment
Share on other sites

pastaread, საღოლ კარგ საქმეს აკეთებ ძალიან  :bow: 

ერთი სული მაქვს როდის დავიწყებთ :) 

Link to comment
Share on other sites

Cocos2d-x-ის კონფიგურაცია Mac-ზე.

1. პირველ რიგში რაც თქვენ დაგჭირდებათ არის Xcode რომელსაც გადმოწერთ AppStore-დან.

2. შემდეგ გადმოიწერთ Cocos2d-x-ს. ჩვენ ვიმუშავებთ ვერსია 3.5-ზე http://www.cocos2d-x.org/download, თუ აღნიშნულ მისამართზე 3.5 ვერსია აღარ არის, მოძებნეთ შემდეგ მისამართზე http://www.cocos2d-x.org/download/version#Cocos2d-x.

3. ამოაარქივეთ გადმოწერილი ფაილი, გახსენით Terminal-ი, შედით ამოარქივებულ ფოლდერში და გაუშვით შემდეგი ბრძანება:

python ./setup.py

4. Mac-ზე ჩვენ მხოლოდ iPhone-ზე ვიმუშავებთ ამიტომ NDK-ს მისამართის მოთხოვნას უბრალოდ Skip გაუკეთეთ. შემდეგ აკრიფეთ შემდეგი 2 ბრძანება:

source /Users/[თქვენი მომხმარებლის სახელი]/.bash_profile
python ./setup.py

5. ისევ Skip გაუკეთეთ NDK-ს მისამართის მოთხოვნას და ახალი პროექტის შესაქმნელად გაუშვით შემდეგი ბრძანება:

cocos new Tanks -p learning.pastaread.tutorialtanks -l cpp -d /Users/[თქვენი მომხმარებლის სახელი]/Documents/Projects

“Tanks” არის პროექტის სახელი;

 

learning.pastaread.tutorialtanks ეს არის აპლიკაციის უნიკალური იდენთიფიკატორი, რომელიც ყველა აპლიკაცის უნდა ჰქონდეს განსხვავებული, ამიტომ რეკომენდირებულია შებრუნებულად დაწერილ თქვენი საიტის მისამართს მიწერილი პროექტის სახელი. მაგ: თუ თქვენი საიტია mysite.com, მაშინ პროექტის იდენთიფიკატორად შეგიძლიათ ჩაუწეროთ: com.mysite.tanks;

/Users/[თქვენი მომხმარებლის სახელი]/Documents/Projects არის მისამართი სადაც გინდათ რომ პროექტი განთავსდეს. მიუთითეთ ნებისმიერი მისამართი.

6. პროექტის შექმნის შემდეგ შედით ახლად შექმნილ ფოლდერში, შემდეგ ამ ფოლდერში “proj.ios_mac” და გაუშვით Tanks.xcodeproj, Xcode-ს გახსნის შემდეგ დააკომპილირეთ პროექტი და ის უნდა გაიშვას თქვენს აპარატზე.

შემდეგ მისამართზე შეგიძლიათ იხილოთ დაყენების ვიდეო ინსტრუქცია: https://www.youtube.com/watch?v=qXqgSNUf9Cc

Link to comment
Share on other sites

Windows-ზე დაყენება ცოტათი უფრო ძნელია (მეტ პროგრამას მოითხოვს).

ერთი ვარიანტია adt-bundle-windows-ით და მეორე - მის გარეშე.

Adt-bundle-windows-ის განახლება გუგლმა 2014-07-02 მერე შეაჩერა, რაც თავისი IDE (Android Studio) კარგად დახვეწა. ჩვენ Eclipse-ზე ვიმუშავებთ, მაგრამ ვინმეს თუ უნდა Android Studio-ზე მუშაობა შეუძლია ინტერნეტში ნახოს საიდან უნდა გადმოიწერეს და როგორ დააკონფიგურიროს.

 

1. adt-bundle-windows-ის გარეშე, თქვენ დაგჭირდებათ:

ANT: http://ant.apache.org/bindownload.cgi

MinGW: http://www.mingw.org/

Java: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Python: https://www.python.org/downloads/

Android NDK: https://developer.android.com/tools/sdk/ndk/index.html

Android SDK: https://developer.android.com/sdk/index.html#Other

Eclipse: https://www.eclipse.org/downloads/

Cocos2d-x v3.5: http://www.cocos2d-x.org/download

 

მიყევით ამ ვიდეოს: https://www.youtube.com/watch?v=xqtT0E68TJM

 

 

 

2. adt-bundle-windows-ით:

Java: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

ADT: Win32: http://dl.google.com/android/adt/adt-bundle-windows-x86-20140702.zip

    Win64: http://dl.google.com/android/adt/adt-bundle-windows-x86_64-20140702.zip

Android NDK: https://developer.android.com/tools/sdk/ndk/index.html

ANT: http://ant.apache.org/bindownload.cgi

Cocos2d-x v3.5: http://www.cocos2d-x.org/download

 

მიყევით ამ ვიდეოს:https://www.youtube.com/watch?v=3gc-YWuyhog

  • Upvote 1
Link to comment
Share on other sites

ესეც პროექტი GitHub-ზე:

https://github.com/pastaread/Tanks

 

დამატებულია ერთი სცენა მხოლოდ.

ახალი კოდის ბლოკები რაც პირველად პროექტში არ არის, მოქცეულია:

// New begin

 

// New end-ს შორის.

 

დეტალურ ახსნასაც დავდებ მალე.

Link to comment
Share on other sites

OpenGL-ს რითი ჯობია?

 

2D თამაშებიც მარტივად იწერება და 3D-ც. C/C++ ია ენა

 

 

საიტის თანახმად უბრალო wrapper-ია OpenGL-ის 2D ფუნქციების და უბრალოდ უფრო მარტივი API-აქვს დამწყებებისთვის. OpenGL ES 1.1/2.0-ს იყენებს თვითონ.

Link to comment
Share on other sites

ახალი პროექტი გავაკეთე GitHub-ზე, https://github.com/pastaread/TanksBattle ეს არის Cocos2d-x ვერსია 3.4-ში, წინა იყო 3.5-ში მაგრამ ანდროიდზე ქონდა პრობლემა და არ ეშვებოდა. ამის გარკვევამ წაიღო დიდი დრო და კოდისთვის არაფერი დამიმატებია, ამ დღეებში მეორე ვერსიას დავდებ.

 

ოთო,

opengl უფრო ქვედა დონეა, მაგაში თუ გააკეთებ სისტემის უფრო ცოტა რესურს წაიღებს თამაში, მაგრამ სავარაუდოდ უფრო მეტი დრო დაგჭირდება გასაკეთებლად. თამაშების ენჯინებს წერენ opengl-ში და directx-ში, რომელშიც მერე თამაშებს წერენ. opengl-ში თუ დაწერ ფიზიკა თუ გჭირდება მთლიანად შენი დასაწერი იქნება, მაგრამ ეგ თუ გეცოდინება შემდეგ ენჯინზე გადასვლა არაფერი იქნება. კარგია იმით რომ პრინციპი გეცოდინება თამაშების კეთების სიღრმისეულად.

Link to comment
Share on other sites

  • Barca unpinned this topic

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.