Lập trình cấp thấp sẽ tốt cho tâm hồn của lập trình viên. Bjarne Stroustrup
STDIO Tiếp tục chuỗi bài viết về hướng dẫn làm game,trong bài viết này tôi sẽ hướng dẫn cách để hiện thực một scene trong game, cũng như cách để chuyển scene. LoadScene chính là đối tượng tôi hướng đến trong bài viết này.
Nội dung bài viết

Giới thiệu

Bạn đã đọc qua các bài viết về cocos2d-x của STDIO :: www.stdio.vn, bạn muốn thử viết một game hoàn chỉnh nhưng chưa biết nên bắt đầu từ đâu? Thông qua chuỗi bài viết về hướng dẫn làm game, tôi sẽ hướng dẫn các bạn hiện thực lại game ZERO một cách đơn giản. Hy vọng rằng, qua đó sẽ giúp bạn làm quen cách để hoàn thành một game, cũng như cách tổ chức project trong game.

Tiếp tục chuỗi bài viết về hướng dẫn làm game Zero,trong bài viết này tôi sẽ hướng dẫn cách để hiện thực một scene trong game, cũng như cách để chuyển scene. LoadScene chính là đối tượng tôi hướng đến trong bài viết này.

Tiền đề bài viết

Sau khi hoàn thành khoá học phát triển games tại STDIO, được sự cho phép của anh La Kiến Vinh, tôi quyết định chia sẻ lại các kiến thức, cũng như kinh nghiệm tôi học được cho cộng đồng.

Đối tượng hướng đến

Bài viết hướng đến các đối tượng đã nắm qua một số kiến thức cơ bản của cocos2d-x.

Hiện thực

Tại LoadScene.h

Thêm vào một biến m_loadingStep và override lại hàm update của scene như sau:

#ifndef __LOAD_SCENE_H__
#define __LOAD_SCENE_H__

#include "cocos2d.h"

class LoadScene : 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 update(float dt);

	// implement the "static create()" method manually
	CREATE_FUNC(LoadScene);
private:
	int m_loadingStep;
};

#endif // __LOAD_SCENE_H__

Tại LoadScene.cpp

Bạn định nghĩa lại hàm update mà bạn vừa khai báo ở trên như sau:

void LoadScene::update(float dt)
{
	switch (m_loadingStep)
	{
		// Load sprite
	case 0:
		SpriteFrameCache::getInstance()->addSpriteFramesWithFile("spr_sheet_zero.plist",
																 "spr_sheet_zero.png");
		break;
		// Load position
	case 1:
		break;
		// Load sounds
	case 2:
		break;
	case 3:
		Director::getInstance()->replaceScene(MainMenuScene::createScene());
		break;
	}
	m_loadingStep++;
}

Hàm này có chức năng load vào cái sprite, sounds, position,...Sau đó chuyển đến MainMenuScene. Để làm được điều này nhớ thêm

#include "MainMenuScene.h"

vào đầu file LoadScene.cpp.

Trong hàm init của scene ta khởi tạo m_loadingStep = 0 và gọi this->scheduleUpdate() như sau:

bool LoadScene::init()
{
	//////////////////////////////
	// 1. super init first
	if (!Layer::init())
	{
		return false;
	}

	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();

	m_loadingStep = 0;
	this->scheduleUpdate();

	return true;
}

Download LoadScene và Resources

LOADSCENE.ZIP

RESOURCES.ZIP

Bạn cần hỗ trợ các dự án kết nối không dây?

Quí doanh nghiệp, cá nhân cần hỗ trợ, hợp tác các dự án IoT, kết nối không dây. Vui lòng liên hệ, hoặc gọi trực tiếp 0942.111912.

  • TỪ KHÓA
  • Arduino
  • ESP32
  • ESP8266
  • Wifi
  • Bluetooth
  • Zigbee
  • Raspberry Pi
THẢO LUẬN
ĐÓNG