Hệ thống hộp thoại / sự kiện trong Java / libGDX


7

Tôi hy vọng rằng tôi đang đăng bài này một cách chính xác vì tôi là người mới trên trang web, vui lòng sửa tôi nếu tôi ở sai vị trí.

Đối với vấn đề của tôi: Tôi đang làm việc trên một trò chơi platformer cuộn bên 2D trong libGDX, và tôi đã gặp phải một vấn đề mà tôi đã xem xét trước đây nhưng chưa bao giờ nhận được câu trả lời chắc chắn. Đây là một ví dụ về những gì tôi đang thắc mắc: Trong các trò chơi như Legend of Zelda, khi người chơi bước lên công tắc, hoặc bắt một ngọn đuốc bốc cháy, điều này có thể mở một cánh cửa hoặc thả một con quái vật hoặc gây ra vô số những điều khác sẽ xảy ra.

Bây giờ, tôi tưởng tượng rằng điều này sử dụng một số loại mối quan hệ hoặc hệ thống nhắn tin kích hoạt sự kiện, nhưng có vẻ như sẽ điên rồ khi mã hóa tất cả các sự kiện này vào chính công cụ trò chơi, ngay cả khi sử dụng hệ thống dựa trên sự kiện.

Điều tương tự cũng xảy ra với các hệ thống hướng dẫn và hộp thoại: người chơi tương tác với một NPC hoặc một loại đối tượng trong trò chơi và hộp thoại / hướng dẫn tiếp tục tại một số điểm nhất định.

Trong trò chơi của tôi, tôi đặc biệt cần có khả năng kích hoạt các sự kiện sau khi một nhân vật làm một việc nhất định và tôi sẽ cần có thể kích hoạt một loạt các cuộc đối thoại. Tôi nghĩ rằng tôi biết làm thế nào tôi có thể mã hóa những thứ này, nhưng tôi sẽ có nhiều cấp độ mà tôi muốn phát triển với trình chỉnh sửa cấp độ như Tiled, thay vì mã hóa chúng. Vì điều này, tôi không biết làm thế nào tôi có thể tích hợp các sự kiện vào một hệ thống như vậy.

Câu hỏi của tôi là: các lập trình viên trò chơi làm gì để tránh mã hóa những thứ này vào trò chơi của họ? Với một cái gì đó giống như một hệ thống nhiệm vụ khổng lồ với vô số hộp thoại, hoặc nhiều cấp độ với các công tắc và sự kiện để kích hoạt, làm thế nào chúng được tích hợp vào trò chơi?

Cảm ơn bạn cho bất kỳ câu trả lời bạn có thể cho tôi, tôi thực sự bối rối về điều này :)

PS Nếu bạn cần rõ ràng hơn về những gì tôi yêu cầu, xin vui lòng cho tôi biết để tôi có thể cung cấp thêm chi tiết nếu cần.

PPS Tôi đã thấy bài đăng này Hệ thống sự kiện của trình soạn thảo Cấp độ, cách dịch sự kiện sang hành động trò chơi nhưng tôi đã thấy trên các trang khác mà mọi người qua lại về việc có nên sử dụng ngôn ngữ kịch bản hay một loại định dạng tệp như XML hoặc JSON, và nó rất khó hiểu ...


Hãy thử đăng bài này lên reddit
nikoliazekter

Không có phản hồi trên reddit, một trong hai. Tôi đoán tôi sẽ phải uber-google cái này
Dibz

Nếu tôi tìm thấy câu trả lời hoặc phát triển bản sửa lỗi của riêng mình, tôi sẽ đặt nó làm câu trả lời
Dibz

Câu trả lời:


2

Vâng, về cơ bản, bạn phải làm cho công cụ của bạn có thể tải logic từ đĩa bằng cách nào đó. Bạn thực sự có thể mã hóa nó vào chương trình của mình, nhưng mọi người thường nghĩ ra một định dạng tệp dữ liệu cho các mục đích này.

Hiệu quả cuối cùng là nó tạo ra một ngôn ngữ lập trình rất đơn giản (và không nhất thiết phải hoàn chỉnh, và không nhất thiết phải là dạng văn bản). Đó là lý do tại sao rất nhiều nhà phát triển trò chơi chỉ sử dụng ngôn ngữ kịch bản như Lua.

Nhưng điều bạn thực sự chỉ cần là xây dựng các thao tác cơ bản vào động cơ của mình (ví dụ sinh ra quái vật, hạ bệ quái vật, hiển thị cây hộp thoại, di chuyển quái vật, thêm mục tiêu nhiệm vụ, giải quyết nhiệm vụ, bất cứ trò chơi nào bạn yêu cầu). Sau đó, bạn cung cấp cho mỗi tình huống một sự kiện hoặc trình kích hoạt (như "quái vật bị giết" hoặc "người chơi bên trong" hoặc "lựa chọn hộp thoại được chọn").

Sau đó, xây dựng một cấu trúc dữ liệu có thể được sử dụng để mô tả từng hoạt động cơ bản. Trong biểu diễn cấp độ trên đĩa của bạn, hãy lưu cấu trúc dữ liệu như vậy cho từng sự kiện của mọi đối tượng. Bất cứ khi nào một sự kiện xảy ra, hãy tải cấu trúc dữ liệu (có thể là một mảng của chúng) và thực hiện những điều nó mô tả.

Nhiều trò chơi có thể thoát khỏi điều này. Một số cũng cần một số loại biến đếm (cộng với các lệnh tăng / giảm) và có thể là một điều kiện (cách dễ nhất để thực hiện: Chỉ cần cung cấp cho nó một biến và một giá trị để kiểm tra lại, sau đó kích hoạt sự kiện khác). Nếu bạn vượt xa điều đó, có lẽ bạn cũng có thể sử dụng một ngôn ngữ kịch bản thực sự.

Những gì bạn lưu cấu trúc dữ liệu như cuối cùng không thực sự quan trọng. Bạn có thể sử dụng XML, gắn thông minh vào các tệp văn bản, xây dựng cấu trúc dữ liệu nhị phân, bất cứ điều gì bạn muốn.

Cấu trúc dữ liệu của bạn có thể dễ dàng như một int để mô tả hoạt động (ví dụ 1 = quái vật sinh sản, 2 là despawn, v.v.) và hai chuỗi đặt tên cho các đối tượng để hoạt động.


Để có một ví dụ tuyệt vời, hãy xem các trò chơi Paradox Interactive và hệ thống sự kiện tùy chỉnh của họ.
JDSweetBeat
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.