Làm tường trong các trò chơi dựa trên gạch: tôi đang thiếu gì?


25

Sau khi dành thời gian hôm nay để ghi lại một số lưu ý liên quan đến việc triển khai các bức tường vào trò chơi dựa trên gạch của tôi, tôi đột nhiên nhận ra rằng nó sẽ không đơn giản như tôi tưởng tượng trước đây. Mặc dù giai đoạn hiện tại trong công việc của tôi thậm chí không gần với việc thực sự tạo mã liên quan đến tường, tôi đã nghĩ ra ba cách khác nhau để làm điều đó. Ngay bây giờ tôi không chắc chắn một trong những ý tưởng của tôi sẽ hoạt động tốt nhất và liệu tôi có bỏ lỡ điều gì hay không.

Quan trọng: một nhân vật CÓ THỂ đứng trên gạch có tường, bất kể hình dạng của họ.

Điểm chung cho cả ba biến thể: tilemap sẽ được "giữ" trong một thùng chứa dựa trên std :: vector (hoặc tương tự) một chiều. Những lý do cho điều đó (khủng khiếp) được giải thích trong câu trả lời cho một câu hỏi khác nhau.

Các lớp container trong các trò chơi dựa trên gạch.

Trở lại bức tường.

A) Cách tiếp cận đơn giản.

Không có gì lạ mắt ở đây. Mỗi thùng chứa gạch có thể chứa không chỉ các ký tự, mà một hoặc một số đối tượng Tường, được gắn vào cạnh bên trong ô.

Cách tiếp cận đầu tiên

Ưu điểm: dễ thực hiện, không có gì thay đổi trong động cơ. Nhược điểm: Hai điều. Một - nó có thể chỉ trong đầu tôi, nhưng một số kết hợp trông xấu xí. Thứ hai - phương pháp này cho phép tạo ra một bức tường đôi từ hai gạch liền kề. Tòa nhà sẽ là một phần quan trọng của trò chơi và các bức tường đôi cho phép các nhà xây dựng có thể từ bỏ việc nâng cấp vật liệu của các bức tường thông qua các phương tiện trò chơi, và chỉ cần tăng độ bền với gấp đôi bức tường hiện có. Đó là điều không mong muốn. Chắc chắn, tôi có thể bao gồm một thủ tục cấm tường đôi, nhưng nó sẽ có cảm giác xấu với nó.

B) Cách tiếp cận thông minh (?).

Thay vì để người chơi nhân đôi toàn bộ bản đồ, tôi sẽ đánh bại họ. Mỗi bức tường có hai nửa được gắn vào cạnh của gạch từ bên trong. Vì vậy, để tạo một "Đơn vị tường" duy nhất, tôi sẽ phải tạo hai đối tượng Nửa tường trong hai ô liền kề.

Cách tiếp cận thứ hai

Ưu điểm: Nó đối xứng !!! Ngoài ra, không có thay đổi đáng kể của thông số kỹ thuật hiện tại là cần thiết. Nhược điểm: Nhiều rắc rối hơn, nhiều đối tượng hơn và tất nhiên là cả "mũ". Như bạn có thể thấy trong hình, một góc về cơ bản sẽ khóc cho một đối tượng "nắp". Tôi thực sự rất tuyệt với nó, nó không quá khó để thêm vào. Này, tôi đã có một kế hoạch cho các cột mỏng được tạo thành từ bốn nắp được kết nối. Ngọt. Tuy nhiên, tôi có một số lo lắng liên quan đến các vấn đề về Tầm nhìn và Đường ngắm có thể có.

C) Tổng biến thể đại tu.

Hoặc, tôi chỉ có thể tạo đường viền và góc như các thùng chứa riêng biệt cho các đối tượng trò chơi. Chỉ cần như vậy.

Cách tiếp cận thứ ba

Ưu điểm: Thậm chí không chắc chắn. Vâng, nó đơn giản. Chắc chắn rồi. Nhược điểm: Nó sẽ yêu cầu đại tu. Không phải mã, rất may, nhưng về tâm lý cơ học trò chơi hiện tại - đó là điều chắc chắn. Những lợi ích không quá rõ ràng. Ngoài ra, chiếc tạp dề này đòi hỏi nhiều container hơn hai cái trước. Toán học lập chỉ mục cũng sẽ có một chút đau đớn.

Vì vậy, ở đây chúng tôi có nó - ba cách khác nhau để làm tường giữa gạch. Nếu có bất kỳ lựa chọn thay thế nào ngoài đó - tôi sẽ vui lòng kiểm tra chúng. Nếu có bất kỳ lợi ích / nhược điểm nào đối với bất kỳ phương pháp nào tôi không thấy - vui lòng chỉ ra chúng.


2
A.2: Là A, chỉ có hai mặt - ví dụ: Bắc và Tây - có thể có một bức tường. Đó là cách tiếp cận mà X-Com sử dụng.
Martin Sojka

@Martin Sojka Điều đó để lại một lỗ hổng ở các góc đông nam. Tuy nhiên, có thể hữu ích khi xem xét mô hình C theo cách này, mỗi ô có thể có sự kết hợp của ba yếu tố tường khác nhau, góc noth, tây và tây bắc.
aaaaaaaaaaaa

Vì vậy, các bức tường có thể nhìn thấy, tôi lấy nó? Không chỉ chặn các cạnh của gạch. Tại sao bạn cần hai nửa trong tùy chọn B? Tại sao không chỉ là một bức tường duy nhất, bù một nửa vào gạch khác?
Richard Marskell - Drackir

@eBusiness, nếu bạn chỉ cho phép các bức tường ở phía bắc và phía tây, bạn có thể mô phỏng các bức tường ở phía nam và phía đông bằng cách chỉ cần đặt các bức tường ở phía bắc và phía tây của gạch bên dưới chúng.
Tetrad

Tôi khuyên bạn nên đi với C. Đó là những gì tôi đang làm trong jemgine.omnisu.com/wp-content/uploads/2011/06/gnomecolony.png này và nó hoạt động khá tốt. Vấn đề duy nhất là rìa phía nam / phía đông của bản đồ. Bạn sẽ phải làm một cái gì đó về điều đó.
Blecki

Câu trả lời:


14

Tôi sẽ sử dụng phương pháp của bạn 'B'.

Để tránh cần 'mũ', chỉ cần mở rộng mỗi bức tường "1/2 độ dày tường" theo cả hai hướng. Điều này sẽ tạo ra các bức tường chồng chéo nơi chúng gặp nhau, nhưng sơ đồ của bạn đã cho thấy đây không phải là vấn đề.

Vì vậy, trong Phương pháp 'B', Pic # 3, bức tường ngang sẽ mở rộng sang bên trái một chút và bức tường dọc sẽ mở rộng ra một chút.

[Tôi mới ở đây, vừa đăng ký. Tôi có thiếu thứ gì không, vì tôi không thể thấy nút 'Thêm bình luận' vào bài viết gốc của bạn. Đó có phải là một đặc quyền của những người có danh tiếng cao hơn? Hay tôi đang nhìn rõ ràng? Xin lỗi vì đã thêm câu này dưới dạng 'câu trả lời'.]


1
Đây là một câu trả lời và tôi tin rằng đó là mức độ danh tiếng 100 (?) Để bình luận. Chào mừng bạn đến với Gamedev SE! :)
Vịt Cộng sản

2

Bạn lưu ý rằng một nhân vật có thể đứng trên một viên gạch có chứa một bức tường nhưng bạn đã xem việc coi mỗi viên gạch là chính bức tường chưa? Thậm chí một nửa gạch như một bức tường theo chiều ngang hoặc dọc?

Ưu điểm: Tính toán và vị trí là không đáng kể, va chạm là không đáng kể trong đó tất cả các tính toán và va chạm chỉ dựa trên tọa độ của vị trí tường.

Nhược điểm: Nó có thể ảnh hưởng đến toàn bộ quá trình thực hiện, mã và đồ họa của bạn. Bạn cũng không muốn từ bỏ hoàn toàn phương pháp của mình, bạn vẫn muốn các trường hợp đặc biệt chỉ có một phần của ô là tường (Liên kết với quá khứ bằng vách đá).

Đây là cách tôi sẽ dựa vào việc triển khai của mình, tiến lên phía trước, biết rằng tôi luôn có thể tham chiếu một ô và thực hiện phép tính trên nó tùy thuộc vào vị trí ký tự của tôi và loại gạch đó là gì.

Một bức tường lâu đài tôi chỉ có thể thực hiện một phép tính từ trung tâm vẽ một cái hộp mà tôi không thể đi qua hoặc nếu đó là một tảng đá tròn tôi có thể thực hiện phép tính tương tự từ trung tâm nhưng như một vòng tròn để nhân vật của tôi có thể di chuyển xung quanh giống như nó tròn.


1

Xin lỗi để nói nhưng cách thứ ba thực sự là cách suy nghĩ, tốt, bạn đã có khả năng để làm điều đó vì vậy hãy tiếp tục và suy nghĩ về hai người kia!

Có một điều là một bức tường có chiều rộng bằng không, hai chiều (chiều cao * chiều dài, trong thế giới 3D) phân vùng hai ô vuông. Bạn nên xem xét chúng như vậy nhưng bạn có thể sử dụng một giải pháp đơn giản hơn là khi nào xây dựng ngục tối của bạn (đặc biệt là nếu người khác có thể xây dựng các bộ phận).

Có vẻ như đây là một trò chơi 2D từ trên xuống, trong đó các bức tường có "chiều rộng" nên chúng cần góc đó (đối tượng 'nắp' của bạn). Đây chỉ là "đồ họa", vì vậy tôi sẽ sử dụng một số loại:

Một bản đồ 2D với các ô (ví dụ: loại gạch và như vậy).

Một bản đồ 2D với 2 bức tường, ví dụ dưới cùng và bên phải (bức tường bên trái sẽ là 'bức tường bên phải' trong ô bên trái từ bức tường này).

+ Logic vẽ tất cả các bức tường và 'mũ', v.v.

Do đó tách biệt logic và đồ họa. Bạn có thể thực hiện một "giao diện" chăm sóc những thứ như SetWall (ThisTile, LEFT, NOWALL) -> đặt bức tường bên phải của ô bên trái ThisTile thành "NOWALL" ...

Có thể điều này có vẻ mờ nhưng điều cần làm là bạn phải luôn cố gắng có một mặt logic (dữ liệu thực tế, không có dự phòng) và mặt khác là 'bản vẽ dữ liệu' sẽ tính toán nếu cần có 'nắp 'v.v.

++

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.