Hướng dẫn hiện thực lại game ZERO 1 cách đơn giản. Giúp làm quen cách để hoàn thành một game, cũng như cách tổ chức project trong game.
Hướng dẫn hiện thực MainMenuScene.
Hiện thực
Hình minh họa sau khi kết thúc bài viết:
Trước khi hiện thực MainMenuScene, vào file config.h định nghĩa thêm để được như sau:
#ifndef __CONFIG_H__ #define __CONFIG_H__ #define TRANSITION_TIME 1.0f static const float SCREEN_DESIGN_WIDTH = 1080.0f; static const float SCREEN_DESIGN_HEIGHT = 1920.0f; static const char *PATH_SPR_BOARD = "spr_board.png"; static const char *PATH_CONF_POS = "conf_objects_pos.plist"; static const char *PATH_SPR_BTN_PLAY = "spr_btn_play.png"; static const char *PATH_SPR_BTN_PLAY_PRESS = "spr_btn_play_press.png"; static const char *PATH_SPR_TITLE_ZERO = "spr_title_zero.png"; enum { zBACKGROUND = 0, zGAME_BOARD, zUI, }; #endif // __CONFIG_H__
Tại MainMenuScene.h
Ở file MainMenuScene.h viết thêm hàm GoToGameScene
như sau:
#ifndef __MAIN_MENU_SCENE_H__ #define __MAIN_MENU_SCENE_H__ #include "cocos2d.h" class MainMenuScene : public cocos2d::Layer { public: // there's no 'id' in cpp, so we recommend returning the class instance pointer static cocos2d::Scene* createScene(); // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone virtual bool init(); void MainMenuScene::GoToGameScene(cocos2d::Ref *sender); // implement the "static create()" method manually CREATE_FUNC(MainMenuScene); }; #endif // __MAIN_MENU_SCENE_H__
Tại MainMenuScene.cpp
Hiện thực hàm init
Thêm đoạn code sau để tạo màu nền cho scene:
// Creat color for background this->addChild(LayerColor::create(Color4B(29, 233, 182, 255)), zBACKGROUND);
Gắn board vào:
Sprite *board = Sprite::createWithSpriteFrameName(PATH_SPR_BOARD); board->setPosition(PositionManager::getInstance()->_board); this->addChild(board, zGAME_BOARD);
Gắn button play vào:
//play button auto btnPlay = MenuItemImage::create(); btnPlay->setNormalSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName(PATH_SPR_BTN_PLAY)); btnPlay->setSelectedSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName(PATH_SPR_BTN_PLAY_PRESS)); btnPlay->setCallback(CC_CALLBACK_1(MainMenuScene::GoToGameScene, this)); btnPlay->setPosition(PositionManager::getInstance()->_play_btn); auto menu = Menu::create(btnPlay, NULL); menu->setPosition(Point::ZERO); this->addChild(menu,zUI);
Và cuối cùng là gắn title Zero vào:
//title Sprite *titleZero = Sprite::createWithSpriteFrameName(PATH_SPR_TITLE_ZERO); titleZero->setPosition(PositionManager::getInstance()->_title); this->addChild(titleZero, zUI);
Hiện thực hàm GoToGameScene
Hàm này có nhiệm vụ chuyển đến GameScene khi được gọi đến.
void MainMenuScene::GoToGameScene(cocos2d::Ref *sender) { auto scene = GameScene::createScene(); Director::getInstance()->replaceScene(TransitionFade::create(TRANSITION_TIME, scene)); }
Download MainMenuScene
Source chứa 2 file MainMenuScene trong bài viết.
Bài chung series
- Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 1: Tạo Scene
- Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 2: Hiện Thực LoadScene
- Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 3: Thiết Kế Kích Thước Màn Hình, Quản Lý Đối Tượng
- Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 4: Hiện thực MainMenuScene
- Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 5: Hiện thực GameScene - Vẽ Suit
- Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 6: Hiện thực GameScene - Thêm thời gian
- Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 7: Hiện thực GameScene - Button
- Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 8: Hiện thực GameScene - Xử lý sự kiện trong game
- Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 9: Hiện thực GameScene - Điểm Số