პირველი ვერსია:

თამაშის მისამართი GitHub-ზე: https://github.com/pastaread/TanksBattle

დამატებულია

1. GameScene.cpp        მეორე სცენის კლასი, cpp და h ფაილი.
GameScene.h
2. GameConstants.h        თამაშის მუდმივები.  

სათითაოდ თითოეული ფაილის აღწერა

GameScene.h:

public:                                                // ღია მეთოდები
static cocos2d::Scene* createScene();            // მეთოდი სცენის შექმნა
virtual bool init();                             // მეთოდი რომელიც
GameScene აღწერისას გაეშვება
void InitDefaults();                              // ცვლადებისთვის დეფოლტ მნიშვნელობების მინიჭების მეთოდი

void PauseGame(Ref* pSender);                    // დაპაუზების მეთოდი
void ResumeGame(Ref* pSender);                // თამაშის გაგრძელების მეთოდი
void RestartGame(Ref* pSender);                 // თამაშის თავიდან გაშვების მეთოდი
void MainMenu(Ref* pSender);                     // მენიუში დაბრუნების მეთოდი

 
CREATE_FUNC(GameScene);                      // init მეთოდის ავტომატურად გამოძახება
 

private:                                                    // დახურული ცვლადები
Size _VisibleSize;                                              // ეკრანის ზომა
Vec2 _Origin;                                                    // ეკრანის დასაწყისი წერტილი
bool _GameIsPaused;                                     // თამაში მიმდინარეობს თუ შეჩერებულია
Menu *_PauseMenu;                                      // მენიუ

 

GameScene.cpp:

GameScene::init() მეთოდში:

auto pauseItem = MenuItemImage::create(“buttonPause.png”, “buttonPause.png”, CC_CALLBACK_1(GameScene::PauseGame, this));
pauseItem->setPosition(Vec2(_Origin.x + _VisibleSize.width – pauseItem->getContentSize().width/2 , _Origin.y + pauseItem->getContentSize().height/2));
auto menu = Menu::create(pauseItem, NULL);
menu->setPosition(Vec2::ZERO);
this->addChild(menu, 1);

პაუზის ღილაკი, დაჭერისას ეშვება შემდეგი მეთოდი GameScene::PauseGame

GameScene::InitDefaults() მეთოდში

_GameIsPaused = false;                            // სცენის გაშვებისას თამაში დაპაუზებული არ არის

GameScene::PauseGame(Ref* pSender) მეთოდში

if (_GameIsPaused == true) return;                // თუ თამაში უკვე დაპაუზებულია, ხელმეორედ მენიუ არ გაიხსნას
_GameIsPaused = true;

auto bResume = MenuItemImage::create(“buttonResume.png”, “buttonResume.png”, CC_CALLBACK_1(GameScene::ResumeGame, this));
bResume->setScale(0.32f);

auto bMenu = MenuItemImage::create(“buttonMainMenu.png”, “buttonMainMenu.png”, CC_CALLBACK_1(GameScene::MainMenu, this));
bMenu->setScale(0.32f);

auto bRestart = MenuItemImage::create(“buttonRestart.png”, “buttonRestart.png”, CC_CALLBACK_1(GameScene::RestartGame, this));
bRestart->setScale(0.32f);

_PauseMenu = Menu::create(bResume, bMenu, bRestart, NULL); _PauseMenu->alignItemsHorizontallyWithPadding(_VisibleSize.width / 10.0f); _PauseMenu->setPosition(_VisibleSize.width * 0.5f, _VisibleSize.height * 0.5f); this->addChild(_PauseMenu, Z_ORDER_MENU);

// პაუზის მენიუს აგება სამი ღილაკით

GameScene::ResumeGame(Ref* pSender) მეთოდში

_GameIsPaused = false;                            // თამაშის გაგრძელება _PauseMenu->removeFromParentAndCleanup(true);    // მენიუს წაშლა

GameScene::RestartGame(Ref* pSender) მეთოდში

this->removeAllChildrenWithCleanup(true);
Director::getInstance()->popScene();
auto scene = GameScene::createScene();
Director::getInstance()->pushScene(scene);

მენიუს წაშლა, GameScene-ის წაშლა და თავიდან გამოძახება

GameScene::MainMenu(Ref* pSender) მეთოდში

Director::getInstance()->popScene();            // სცენის წაშლა

GameConstants.h:

#define Z_ORDER_MENU 1001                            // კოდში ნებისმიერ ადგილას სადაც არის Z_ORDER_MENU ნიშნავს 1001-ს

HelloWorldScene.cpp:

// New begin
#include “GameScene.h”                            // თამაშის სცენის h ფაილის დაინქლუდება, ქვევით გამოყენების მიზნით
// New end

// New begin
// Button: start game
auto startItem = MenuItemImage::create(“buttonGamePlay.png”, “buttonGamePlay.png”, CC_CALLBACK_1(HelloWorld::startGame, this));
startItem->setPosition(Vec2(visibleSize.width * 0.5f, visibleSize.height * 0.3f));
auto menuStart = Menu::create(startItem, NULL);
menuStart->setPosition(Vec2::ZERO);
this->addChild(menuStart, 1);
// New end                                        // ღილაკი თამაშის სცენის გასაშვებად

// New begin
void HelloWorld::startGame(cocos2d::Ref* pSender)
{
auto scene = GameScene::createScene();
Director::getInstance()->pushScene(scene);
}
// New end                                        // თამაშის სცენის აღწერა და გაშვება

Leave a comment