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);
}
}
0 Comment:
Post a Comment