Search…

Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 4: Hiện thực MainMenuScene

30/09/20202 min read
Hướng dẫn tạo màu nền cho background, tạo sprite gắn vào scene, tạo MenuItemImage từ sprite sheet, chuyển đổi qua game scene với TransitionFade.

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:

Main menu scene game zero cocos2d0-x

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.

MainMenuScene.zip

Bài chung series

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024