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ố