Game Studio
Liên kế mạng xã hội

Game Studio


Tạo Tilemap Trong Cocos2d-x 3.x.x

Giới thiệu

Nếu bạn đã chơi nhiều thể loại game như nhập vai, phiêu lưu,...Bạn chắc hẳn sẽ thấy nhiều Maps trong game. Maps trong hầu hết các game 2D hiện nay là loại Tile Map, nó cực kì hiệu quả và dễ dàng trong việc thiết kế và phức tạp những cảnh trong game. Trong bài hôm nay tôi cùng các bạn sẽ tìm hiểu Tile Map là gì và làm thế nào để sử dụng nó trong Cocos2d-x.

Tiền đề bài viết

Bài viết này là bài viết nằm trong những loạt bài viết của tôi về tổng quan làm game 2D sử dụng Cocos2d-x 3.4.

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

Bài viết này tôi hướng đến những lập trình viên mới bắt đầu tìm hiểu và học tập làm game 2D bằng Cocos2d-x.

Tile map là gì?

Đây là một Tile Map 20x15.

Tile Map được tạo từ nhiều Tile. Tile là những nơi chứa những hình ảnh dùng để tạo nên Tile Map được gọi là Tileset. Cũng có thể hiểu Tileset là một Sprite trong một Sprite Sheet.

Ưu điểm

Việc sử dụng Tileset để vẽ một Map làm cho kích thước của tập tin giảm, dễ nâng cấp và sửa chữa. Công việc thiết kế map là một công việc tốn thời gian nhưng nhờ nó có thể tiết kiệm và dễ dàng trong việc thiết kế.

Các thành phần trong một tile map

  • Orientation: Có hai loại Tile Map là isometric orthogonal.
  • Map Zise: Số lượng Tile trong Map.
  • Tile zise: Kích thước của một Tileset.
  • ID tilset/ GID: Đây là vị trí của của Tileset trong Sprite Sheet duy nhất. Được tính từ trái qua phải là từ trên xuống dưới. Đối với mỗi Tile, bạn cần phải có cách nào đó để liên kết nó với một Tileset và một địa điểm cụ thể về Tileset đó.
  • Tọa độ Map. 

 

Thiết kế và sử dụng

Quá trình thiết kế và sử dụng Tile để tạo Maps được hoạt động theo các bước sau.

  1. Chọn kích thước Maps và kích thước của Tile.
  2. Thêm Tilesets từ Tprite Sheet.
  3. Đặt Tilesets lên Map.
  4. Thêm một số đối tượng bổ sung cho một cái gì đó khác.
  5. Lưu Map thành một file format TMX.
  6. Dùng các file format TMX này trong trò chơi của bạn.

Tạo một bản đồ với ứng dụng Tiled

Làm sao để bạn có thể tạo ra môt Tile Map? Hiện nay có nhiều công cụ có thể làm được điều này. Tiledlà một công cụ phổ biến, có được tích cự phát triển và có một cộng đồng người dùng lớn. Cocos2d-x hỗ trợ map được tạo từ Tiled Map Editor và lưu ở định dạng TMX

Bạn có thể download tại http://www.mapeditor.org . Cài đặt nó như các phần mềm thông thường khác.

Sau khi chạy chạy Tiled, bạn hãy chọn File/New và thiết lập các giá trị của Map.

Tiếp đến bạn cần thêm Titlset để vẽ map của bạn. Chọn trên Map ở thanh Menu, sau đó chọn New Tileset.

Sau khi thiết lập xong cho Titleset bạn chọn OK bạn sẽ được màn hình như ở dưới.

Dưới đây là sản phẩm của tôi sau khi thiết kế.

Sau khi bạn thiết kế xong Map của bạn. Bạn chọn save .Ở đây bạn sẽ được một file format .tmx.

Chú ý:

  • Trong Resources trong dự án của bạn. Bạn lưu cả file format và file sprite sheet chứa các titelset để có thể sử dụng trong Cocos2d-x.
  • Map được tạo bởi nhiều Tile Layer, tùy vào logic game của bạn mà sử dụng những Tile Layer sao cho hợp lý. Ví dụ trên đây tôi chỉ dùng 1 Tile Layer. Bạn cũng có thể dùng nhiều Tile Layer để tạo một Map nhìn tương đương.

Khởi tạo một TMX Map

  1. // reading in a tiled map.
  2. auto map = TMXTiledMap::create("TileMap.tmx");
  3. addChild(map, 0, 99); // with a tag of '99'

Get-Add-Delete-Modify một Title

Để lấy được một Tile(Sprite) trong Map.

  1. // Get title.
  2. auto layer = map->layerNamed("Tile Layer 1");
  3. auto tile = layer->tileAt(Vec2(1.0f, 1.0f));

Lấy một GID trong Map tại tọa độ (1,1).

  1. // Get GID.
  2. unsigned int gid = layer->tileGIDAt(Vec2(1.0f, 1.0f));

Xóa một tile trong Map tại tọa độ (5,5).

  1. // Xóa một tile
  2. layer->removeTileAt(Vec2(5.0f, 5.0f));

Thay một tile trong Map bằng một GID mới bằng 1 tại tọa độ (1,1).

  1. layer->setTileGID(1, Vec2(1.0f, 1.0f));

Vòng lặp của một layer.

  1. Size s = layer->getLayerSize();
  2. for (int x = 0; x < s.width; ++x)
  3. {
  4.   // logic game
  5. for (int y = 0; y < s.height; ++y)
  6. {
  7. // logic game
  8. }
  9. }

Tham khảo

http://www.cocos2d-x.org

Theo: Stdio


Đăng sự kiện cho developer