Search…

Tạo High Score với Cocos2d-x 3.x.x

29/09/20202 min read
Bài viết hướng dẫn lưu dữ liệu với các kiểu interger, float, double hay bool trong games với Cocos2d-x 3.x.x, giới thiệu về UserDefault, tác dụng và một ví dụ đơn giản để làm một high score trong game.

Với những ai mới bắt đầu lập trình games 2D sẽ có câu hỏi: "Làm thế nào để lưu lại điểm số cao nhất". Điều này tương đối khó khăn vì khi khởi động lại game, tất cả giá trị sẽ được đặt về giá trị ban đầu.

Userdefault

UserDefault được Cocos2d-x xây dựng, giúp cho người lập trình có thể lưu 1 giá trị dữ liệu với 1 key tương ứng trong .xml, các giá trị đi với key đó vẫn tồn tại ngay cả khi game khởi động lại sau khi thoát ra.

Hiện thực

Khởi tạo dự án Cocos2d-x, trong HelloWorldScene.cpp thêm đoạn mã sau ở phần đầu của file

const char *HIGH_SCORE = "key";

Trong phương thức HelloWorldScene::init() thêm đoạn mã sau:

auto def = UserDefault::sharedUserDefault();
def->setIntegerForKey(HIGH_SCORE, 2000);
def->flush();

Giải thích

  • Dòng 1: khởi tạo def là 1 con trỏ kiểu UserDefault và nó sẽ giúp truy cập vào tất cả các phương pháp trong lớp đó, setIntegerForKey(...) là phương pháp đặt giá trị số nguyên tương ứng với char*, các key luôn luôn là kiểu char*.
  • Dòng 3: def->flush() có chức năng xóa các nội dung file xml, về cơ bản lưu dữ liệu vào các file xml.

Để lấy giá trị, dùng phương thức getIntegerForKey(...)

int iHighScore = def->getIntegerForKey(HIGH_SCORE);

Chuyển 1 số nguyên thành 1 chuỗi.

CCString *highScore = CCString::createWithFormat("%i", iHighScore);

Thêm highScore vào label.

auto highScoreLabel = Label::createWithTTF(hightScore->getCString(), "fonts/Marker Felt.ttf", 60);
highScoreLabel->setColor(Color3B::RED);
highScoreLabel->setPosition(Point(200, 200));
this->addChild(highScoreLable, zUI_HUD);

Ngay bây giờ khi chạy project game sẽ thấy giá trị 2000 trên màn hình.

High score trong Cocos2d-x

Bây giờ ngưng chạy và comment các dòng như sau:

//def->setIntegerForKey(HIGH_SCORE, 2000);
//def->flush();

1 lần nữa khi chạy dự án vẫn còn giá trị 2000 trên màn hình, có nghĩa là HIGH_SCORE được lưu trữ trong các file xml và giá trị lấy từ nó.

Do đó những thay đổi vẫn tồn tại ngay cả khi những ứng dụng được đóng lại.

  • Ngoài dữ liệu với kiểu int, có thể lưu trữ dữ liệu với các kiểu float, double, bool, string với các phương thức tương ứng: setFloatForKey , setDoubleForKey , setBoolForKey, setStringForKey
  • Với đoạn mã đơn giản bên trên, có thể thêm 1 tiện ích nhỏ trong game, nhờ đó người chơi sẽ có động lực chơi game. Ngoài ra có thể dùng nhiều key để lưu level game, hay là tên người chơi kèm số điểm của họ,có thể lưu số điểm của 3 người chơi cao nhất, ...
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