STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

    Xử Lý Đa Ngôn Ngữ Trong Game Với Cocos2d-x

    Hướng dẫn kỹ thuật xử lý đa ngôn ngữ trong game với cocos2d-x.

    Ryan

    29/03/2015
    27/09/2020
    2 phút đọc
    Xử Lý Đa Ngôn Ngữ Trong Game Với Cocos2d-x

    Hầu hết các game hiện nay trên thế giới đều chọn tiếng Anh làm ngôn ngữ chính bởi tính phổ biến của nó. Tuy nhiên, điều gì sẽ xảy ra nếu đối tượng chơi game không biết gì về loại ngôn ngữ trên? Chắc chắn là điều đó sẽ không vui vẻ gì dù cho game có hay hơn đi chăng nữa? Để giải quyết được vấn đề và tăng tính thân thiện, gần gũi hơn cho game với người chơi, các lập trình viên thường phát triển game theo hướng đa ngôn ngữ. 

    Hiện thực

    Hiện thực lớp LanguageManager

    class LanguageManager
    {
    public:
    	static LanguageManager* getInstance();
    	string getStringForKey(string key) const;
    private:
    	static LanguageManager* _instance;
    
    	LanguageManager();
    	virtual ~LanguageManager();
    
    	Document _document;
    	string _fileName;
    };

    Bên trên là lớp LanguageManager được hiện thực với kỹ thuật Singleton.

    Hàm khởi tạo

    LanguageManager::LanguageManager()
    {
    	auto def = UserDefault::sharedUserDefault();
    	auto languageCurrent = def-> getStringForKey("LANGUAGE", "en");
    
    	if (languageCurrent == "en")
    		_fileName = "en.json"; // english language
    	else
    	if (languageCurrent == "vi")
    		_fileName = "vi.json"; // vietnamese language
    	else
    		_fileName = "en.json"; // default languge
    
    	ssize_t size;
    	const char* buf = (const char*)FileUtils::getInstance()->getFileData(_fileName.c_str(), "r", &size);
    	string content(buf);
    	string clearContent = content.substr(0, content.rfind('}') + 1);
    
    	_document.Parse<0>(clearContent.c_str());
    }

    Hàm khởi tạo của lớp LanguageManager hỗ trợ lựa chọn file json chứa loại ngôn ngữ tương ứng để đọc dữ liệu lên _document.

    Phương thức getStringForKey

    Phương thức này giúp lấy được đoạn string cần hiển thị lên game từ các giá trị bên trong biến _document và key truyền vào.

    string LanguageManager::getStringForKey(string key) const
    {
    	return _document[key.c_str()].GetString();
    }

    Cách dùng

    Giả sử có 2 file json tương ứng với 2 ngôn ngữ Anh và Việt như sau:

    File en.json

    {
    	"STR_ASKFORSOUND":"DO YOU WANT TO PLAY SOUND?",
    	"STR_GAMENAME":"SINS",
    	"STR_VERSION":"V1.1.0"
    }

    File vi.json

    {
    	"STR_ASKFORSOUND":"BẠN MUỐN BẬT ÂM THANH?",
    	"STR_GAMENAME":"SINS",
    	"STR_VERSION":"V1.1.0"
    }

    Vào source code của game và thử tạo 1 label với nội dung tương ứng với key là "STR_ASKFORSOUND":

    auto label = LabelTTF::create(LanguageManager::getInstance()->getStringForKey("STR_ASKFORSOUND").c_str(), "fonts/arial.ttf", 24);

    Kết quả.

    ss_3

    Thử thay đổi ngôn ngữ hiển thị là Việt:

    auto def = UserDefault::sharedUserDefault();
    def->setStringForKey("LANGUAGE", "vi");
    
    auto label = LabelTTF::create(LanguageManager::getInstance()->getStringForKey("STR_ASKFORSOUND").c_str(), "fonts/arial.ttf", 24);

    Kết quả

    ss_4

    Code

    CLASSES.ZIP

    RESOURCES.ZIP

    0 Bình luận
    Lập Trình Game

    Lập Trình Game

    Kiến thức, kỹ thuật, kinh nghiệm lập trình game.

    Đề xuất

    Xử Lý Sự Kiện Trong Cocos2d-x 3.x.x
    Bài viết nằm trong loạt bài viết chương trình Tự Học Cocos2d-x 3.x.x. ...
    Xử Lý Với File PLIST trong Cocos2d-x 3.x.x
    Giới thiệu những đặc điểm, cách xử lý và ứng dụng của file PLIST trong ...

    Khám phá

    Phát Triển Game Funny Halloween Pumpkins với Cocos2d-x - Phần 1
    Hướng dẫn làm game cụ thể bằng Cocos2d-x với code mẫu và game mẫu.
    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 cách nhận các sự kiện từ người chơi và xử lý chúng theo logic ...
    Kỹ Thuật Xây Dựng Đa Màn Hình Cho Game Với Cocos2d-x
    Tìm hiểu về kỹ thuật xử lý đa màn hình trên Cocos2d-x.
    Xử Lý Với File JSON Trong Cocos2d-x 3.x.x
    Tìm hiểu những đặc điểm, cách xử lý và ứng dụng của file JSON trong ...
    Thành Phần Hoá Các Đối Tượng Trong Game Với Cocos2d-x
    Hướng dẫn thành phần hoá các đối tượng trong game với Cocos2d-x
    Làm Thế Nào Để Tạo Fixtures Cho Vật Có Hình Dạng Phức Tạp Trong Cocos2d-x?
    Hướng dẫn sử dụng phần mềm Physics Editor dùng để tạo Fixtures cho vật ...
    Quản Lý Vị Trí Của Các Đối Tượng trong Cocos2d-x
    Hướng dẫn quản lý vị trí các đối tượng trong Cocos2d-x.
    Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 2: Hiện Thực LoadScene
    Hướng dẫn cách để hiện thực một scene trong game, cũng như cách để ...
    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020