2009-04-08 88 views
9

Tôi đang trong quá trình viết một game nhập vai nhỏ trên không nhiều trong mạch của loạt Ultima cổ điển. Tôi cần một cách nhanh chóng và bẩn (nhanh hơn bẩn) để thiết kế các bản đồ lớn - nói 1000 viên x 1000 viên gạch, và tôi cần một số trợ giúp suy nghĩ về cách làm việc này.Cách tốt nhất để xây dựng bản đồ trò chơi

Tôi có thể nói có một tốt 50-60 loại khác nhau của gạch - rừng, sông, đồng bằng, vv

Cho đến nay, các tốt nhất mà tôi có thể đưa ra là

  • xác định một mảng (hoặc một số cấu trúc tương tự) để giữ hai mẩu thông tin chính - một định danh vị trí/tọa độ và một số nguyên từ 1-60 xác định loại gạch đó là gì.

  • trong ứng dụng chỉnh sửa raster, vẽ hình ảnh 1000px x 1000px. Sử dụng bảng màu gồm 50 màu khác nhau, tôi vẽ bản đồ của tôi - 1 pixel tương ứng với 1 ô. Nói cho một gạch nước nhất định, tôi sẽ vẽ một nhóm các điểm ảnh trong một màu xanh nhất định. Lưu dưới dạng .gif hoặc .png.

  • viết một số bộ xử lý sau đó phân tích gif/jpg nói trên và phân tích pixel theo pixel. Tùy thuộc vào giá trị RGB của pixel, nó xác định loại gạch. Bộ vi xử lý sau đó mã tạo ra một số thói quen cư trú trong mảng bản đồ.

Cho đến nay, tôi nghĩ rằng phải có một cách dễ dàng hơn.

Trả lời

3

Hãy thử SourceForge: http://sourceforge.net/search/?type_of_search=soft&words=tile+editor

Một số trong những biên tập viên sẽ tiết kiệm ra một số định dạng tiêu chuẩn, sau đó bạn có thể kéo vào trò chơi của bạn như bạn muốn.

TileStudio sẽ thậm chí đầu ra tập tin tiêu đề/nguồn có thể được biên dịch trực tiếp vào động cơ của bạn (không chắc chắn những gì nhu cầu của bạn)

2

Âm thanh như một cách khá tốt với tôi. Tuy nhiên, bạn có thể thấy việc tạo trình tạo bản đồ tùy chỉnh để dễ dàng.

Một tùy chọn khác có thể là viết chương trình cho phép bạn xác định vị trí của các đối tượng địa lý chính và chương trình trình tạo sẽ điền vào phần còn lại. (Ví dụ: Sông chạy từ x1, y1 đến x2, y2. "Lớn" forrest tập trung tại x, y, vv). Điều đó có thể cho phép bạn xác định một bản đồ lớn chỉ từ một tệp nhỏ hơn về các đối tượng địa lý. Hãy nghĩ về nó giống như việc vẽ vector thay vì chỉ định từng điểm ảnh cuối cùng trong một raster. :-)

11

Có cần gạch nền không? Hãy xem tại trang web của Daniel Cook, Lost Garden, không chỉ anh cung cấp cho bạn một số tác phẩm nghệ thuật miễn phí ngon, nhưng ông thảo luận về sự ra đời của vị trí tùy ý các hình ảnh trong các trò chơi, chứ không phải gạch:

"Ngày xửa ngày xưa, Bạn cần sử dụng các ô vuông nhỏ cho tất cả mọi thứ Hiện tại, không có nhu cầu thực sự để tạo hình nền 2D dựa trên 2D. Thả đồ họa của bạn xuống tùy ý vị trí và lớp như người điên. Các trò chơi như Aquaria trông tuyệt vời và không có nơi nào để xem."

cũng có một liên kết trong đó cho step-by-step instructions vào làm một biên tập viên trong game dựa trên IndieLib.

+1

1 cho ra khỏi hộp tư duy! Tôi sẽ ở đây cả đêm! –

1

Một lựa chọn khác sẽ được tạo ra (pixel) bản đồ hoặc trực tiếp bản đồ game. Điều này tất nhiên phụ thuộc vào kích thước của worl của bạn, và nếu bạn có nhiều tài nguyên cụ thể (thành phố tại thời điểm này, một mỏ tại thời điểm này ...)

Có rất nhiều bài viết về chủ đề này tại trang web về trò chơi "rogue", có thể khá hữu dụng. (hãy thử RogueBassin ví dụ)

Họ cũng nói về cấu trúc dữ liệu để cho phép có nhiều biến thể hơn (chẳng hạn như có hình ảnh cơ sở và thêm ngẫu nhiên một số hình ảnh "nhỏ") khi bạn xác định đại diện trong mảng bản đồ của mình. Ví dụ để thêm một số đá nhỏ vào cỏ). Những người khác có hiệu lực như trong ultima V, nơi mà một số phần tử mái trở nên trong suốt khi bạn vượt qua unde chúng cũng dựa vào cấu trúc này.

Chúng tôi thấy rằng có một hình ảnh (trong trường hợp của chúng tôi là một tập hợp hình ảnh) rất dễ dàng, vì bạn có thể nâng cấp giao diện (không có rừng hình chữ nhật!) Khi bạn có thời gian và tập trung vào vị trí nhiệm vụ cụ thể .

liên quan

Guillaume

2

tôi khuyên bạn nên có thông tin vị trí của bạn được các thông tin chỉ mục cho cấu trúc dữ liệu lưu trữ của bạn, chứ không phải là một cái gì đó bạn đang nhìn lên trong đó. I E.

int get_terrain_type(int x, int y) { 
    return terrain[x][y]; 
} 

(Không hoàn toàn chắc chắn đó không phải là những gì bạn có nghĩa là, nhưng tôi nghĩ rằng tôi muốn đưa nó ra khỏi đó.)

Các vấn đề liên quan