Debugging chăm chỉ gấp đôi như viết mã ở nơi đầu tiên. Do đó, nếu bạn viết mã rõ ràng đến mức có thể, bạn sẽ, theo định nghĩa, không đủ thông minh để gỡ rối nó. Christopher Thompson
STDIO Tính điểm và hiển thị lên màn hình là một công việc không thể thiếu trong hầu hết các game hiện nay. Bài viết ra đời với mong muốn hỗ trợ một số bạn đang trong quá trình tìm hiểu về làm game với cocos2d-x làm được điều này.
Nội dung bài viết

Giới thiệu

Tính điểm và hiển thị lên màn hình là một công việc không thể thiếu trong hầu hết các game hiện nay. Trong bài viết này tôi sẽ hướng dẫn các bạn làm điều này với vài thủ thuật đơn giản.

Tiền đề bài viết

Trong quá trình học tập và chia sẻ kiến thức của bản thân, tôi thường nhận được nhiều câu hỏi từ nhỏ đến lớn. Bài viết này ra đời được xem như là giải đáp một câu hỏi dạo gần này tôi hay nhận. Tuy là một kiến thức nhỏ nhưng hi vọng sẽ giúp được các bạn giải quyết được vấn đề.

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

Dành cho các đối tượng đang trong quá trình học tập và bắt đầu tìm hiểu về cocos2d-x.

Ý tưởng

Để có thể tính điểm trong game thì cách thiết thực nhất chính là dùng một biến kiểu “số” để lưu trữ cũng như tăng giảm điểm (ở đây tôi dùng kiểu unsigned int để ví dụ cho bài viết này). Vậy làm cách nào để hiển thị điểm số mà bạn đang chơi lên màn hình. Để hiện thực được điều này, cocos2d-x cho phép chuyển kiểu dữ liệu từ “số” sang “chuỗi”. Và từ đó có thể render chuỗi này lên màn hình.

Hiện thực

Ảnh minh họa:

ss_1

Dùng hàm createWithFormat của CCString để khởi tạo một biến tạm thời kiểu CCString* từ số điểm của bạn. 

Ví dụ
CCString *tempScore = CCString::createWithFormat("%i", score);

Khởi tạo UI Label với giá trị là kiểu CCString* vừa có. Để hiểu hơn về UI Label bạn vui lòng đọc bài viết Khái Niệm Và Một Số Đối Tượng Để Thiết Kế UI Trong Cocos2d-x của tác giả Đạt Trương

Ví dụ
scoreLabel = Label::createWithTTF(tempScore->getCString(), "fonts/Marker Felt.ttf", 
        visibleSize.height*SCORE_FONT_SIZE);
scoreLabel->setColor(Color3B::RED);
scoreLabel->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));
this->addChild(scoreLabel, 10000);

Khi thay đổi điểm số trong game, chỉ cần khởi tạo một biến tạm thời kiểu CCString* như ở trên và set lại string cho Label

Ví dụ
score++;
CCString *tempScore = CCString::createWithFormat("%i", score);
scoreLabel->setString(tempScore->getCString());

Tổng kết

Trên đây là một kinh nghiệm nho nhỏ tôi muốn chia sẻ đến các bạn. Hi vọng sẽ giúp được những ai đang trong quá trình học tập và tìm hiểu.

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