STDIO
Tìm kiếm gần đây

    Nội dung

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

    Ryan Lê

    29/03/2015
    22/05/2016
    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 hề 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ủa bạn 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 họ thường phát triển game của họ theo hướng đa ngôn ngữ.  Bài viết chia sẻ đến các bạn kỹ thuật xử lý đa ngôn ngữ trong game với cocos2d-x mà tôi dùng trong Sins.

    Giới thiệu

    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 hề 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ủa bạn 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 họ thường phát triển game của họ theo hướng đa ngôn ngữ. 

    Bài viết chia sẻ đến các bạn kỹ thuật xử lý đa ngôn ngữ trong game với cocos2d-x mà tôi dùng trong Sins. Các bạn có thể tham khảo thêm tại bài viết Unicode Và Lập Trình Đa Ngôn Ngữ Trong Game.

    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. Để hiểu hơn về  UserDefault bạn vui lòng tham khảo thêm bài viết Tạo High Score Với Cocos2d-x

    Phương thức getStringForKey

    Phương thức này giúp bạn 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 mà bạn truyền vào.

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

    Cách dùng

    Giả sử tôi có 2 file json tương ứng với hai 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"
    }

    Giờ tôi sẽ vào source code của game và thử tạo một 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

    Download

    Các bạn có thể tải demo về tại file đính kèm bên dưới.

    CLASSES.ZIP

    RESOURCE.ZIP

    Thảo luận

    Đăng nhập

    Bài viết liên quan

    Xử Lý Với File JSON Trong Cocos2d-x 3.x.x

    Xử Lý Với File JSON Trong Cocos2d-x 3.x.x

    JSON đóng góp vai trò quan trọng trong nhiều lĩnh vực cũng như lập trình game trong việc tăng hiệu suất của chương trình, giúp lập trình viên dễ dàng đọc và viết, dễ phân ...

    Lê Viết Duy

    12/06/2017

    Kỹ Thuật Xây Dựng Đa Màn Hình Cho Game Với Cocos2d-x

    Kỹ Thuật Xây Dựng Đa Màn Hình Cho Game Với Cocos2d-x

    Bài viết này tôi viết muốn gửi đến các bạn một trong các cách xử lý đa màn hình, để khi xây dựng một game có thể chạy tương thích với nhiều loại màn hình hơn. Game được ...

    Ryan Lê

    06/03/2015

    Kỹ Thuật Popup Với Cocos2d-x 3.x.x

    Kỹ Thuật Popup Với Cocos2d-x 3.x.x

    Trong quá trình xây dựng và phát triển lại Sins. Bản thân tôi và nhóm phát triển luôn được học tập và phát triển về kiến thức lập trình game, đặc biệt là với Cocos2d-x ...

    Trương Xuân Đạt

    23/01/2015

    Xử Lý Với File PLIST Trong Cocos2d-x 3.x.x

    Xử Lý Với File PLIST Trong Cocos2d-x 3.x.x

    Trong việc xây dựng, thiết kế project games của bạn, có nhiều tính toán, kỹ thuật, tính năng bạn phải sử dụng file để thao tác nhằm tăng hiệu suất của chương trình, giúp ...

    Lê Viết Duy

    14/06/2017

    Giới Thiệu Audio Trong Cocos2d-x 3.x.x

    Giới Thiệu Audio Trong Cocos2d-x 3.x.x

    Giới thiệu về đối tượng Simple Audio Engine trong cocos2d-x 3.x.x. Các khái niệm cơ bản về audio trong game với cocos2d-x: back ground music, sound effect. Các thao tác ...

    Trương Xuân Đạt

    23/01/2015

    Xử Lý Sự Kiện Trong Cocos2d-x 3.x.x

    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. Trong bài viết sẽ giới thiệu khái niệm các loại sự kiện trong cocos2d-x và các ví dụ hiện thực các ...

    Trương Xuân Đạt

    23/01/2015

    Phát Triển Game Funny Halloween Pumpkins Với Cocos2d-x - Phần 1

    Phát Triển Game Funny Halloween Pumpkins Với Cocos2d-x - Phần 1

    Bài viết hướng dẫn các bạn mới muốn học làm game bằng Cocos2d-x. Thông qua bài viết này, các bạn có thể biết đuợc một số kiến thức về xử lý cũng như cách bố trí cấu trúc ...

    Nguyễn Văn Lợi

    27/11/2015

    Quản Lý Vị Trí Của Các Đối Tượng Trong Cocos2d-x

    Quản Lý Vị Trí Của Các Đối Tượng Trong Cocos2d-x

    Trong lập trình game, việc xử lý “cứng” các đối tượng là điều nên tránh. Khi đem sản phẩm lên một màn hình có tỉ lệ khác, vị trí các đối tượng có thể sẽ không còn được ...

    Rye Nguyen

    04/08/2015

    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 8: Hiện thực GameScene - Xử lý sự kiện trong game

    Tiếp tục chuỗi bài viết về hướng dẫn làm game, hôm nay tôi sẽ hướng dẫn cách hiện thực GameScene. Cụ thể trong bài viết này tôi sẽ giúp các bạn cách nhận các sự kiện từ ...

    Ryan Lê

    10/03/2015

    Quản Lý Vị Trí Các Đối Tượng Trong Game

    Quản Lý Vị Trí Các Đối Tượng Trong Game

    Thông thường khi khởi tạo một đối tượng trong game, các lập trình viên đều khởi tạo một vị trí nào đó cho chúng. Điều đó có nghĩa là các đối tượng luôn tồn tại trong game ...

    Ryan Lê

    30/03/2015

    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
    [email protected]

    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