CHƯƠNG X. MAP OBJECT

Link Source code HD không che: https://goo.gl/5icqo2 
Các bạn nên mở sources code vừa đọc vừa so sánh với tut này vì mình sẽ giải thích những gì trong sources code.

1. Map Object

  • Map object là những đối tượng được tạo ra trên bản đồ, giống như viên gạch mario, … vì những object này có thể tương tác được với player không phải là 1 đối tượng tĩnh (Static object như ống nước mario). Trong map ngoài việc lưu thông tin các tile thì cũng lưu thông tin các đối tượng này để chúng ta có thể tạo các object này trong lúc load map.
  • Các bạn có thể lật lại phần Camera để xem về cách thêm object. Có nhiều cách để thêm object thì cách của mình là 1 cách đơn giản, dễ thực hiện vì nó giống như việc tạo 1 tile nhưng thay vì tạo tile để vẽ thì mình tạo object để vẽ và có hàm Update riêng.


\


2. Chỉnh sửa, thêm

  • Mình có thêm class Map object ở trong folder GameObjects/MapObjects là những viên gạch của game mario. Các bạn đọc code để biết thêm vì đơn giản nó cũng như là những object bình thường, có đặc biệt là viên gạch dấu hỏi chấm vì nó là 1 Animation.

  • ở class GameMap mình sẽ thêm hàm Update, dùng để update các object. Map của mình sẽ nắm list các object, nhận nhiệm vụ vẽ và update chúng. Thêm một số hàm phụ trợ kiểm tra việc va chạm của map để sử dụng cho camera sau này.
  • Ở phần loadmap mình sẽ thêm việc load những Map Object ở đây là những viên gạch trong mario. Mình tạo ở phần này #pragma region -BRICK AND COIN LAYER- các bạn có thể xem trong source code, nó giống như việc tạo Tile chỉ đọc ở những Layer có visible = false (không hiển thị lên màn hình) lấy thông tin của tile (vị trí, kích thước) thùy thuộc vào tên layer thì mình tạo những object khác nhau. Tên layer sẽ giống với tên layer ở trong Tile map




  • Draw thì ngoài việc Draw các tile thì mình sẽ vẽ thêm các object này lên.
for (size_t i = 0; i < mListBricks.size(); i++)
{
    mListBricks[i]->Draw(trans);
}
  • Update mình cũng sẽ làm như Draw update các object này vì những Map Object đều có khả năng di chuyển hay chạy animation.


void GameMap::Update(float dt)
{
    for (size_t i = 0; i < mListBricks.size(); i++)
    {
        mListBricks[i]->Update(dt);
    }
}

Kết luận

Map object là thành phần không thể thiếu trong game, ngoài việc tạo thông tin các object bằng tilemap thì bạn có thể tách thành file riêng lưu thông tin từng object theo tọa độ và body của object đó, cách này sẽ nhanh hơn cách mình rất nhiều tuy nhiên bạn phải code phần đọc file và có cấu trúc file cho các object này.
Share on Google Plus

About Lộc Thọ

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment
    Facebook Comment

0 Comment:

Post a Comment