Tìm gạch không bao gồm trong trò chơi dựa trên gạch


9

Tôi đang làm việc trên một trò chơi dựa trên gạch 2D và hiện tại tôi đang cố gắng để có được khối lượng bóng tương đương 2d để hoạt động. Tôi gặp khó khăn khi tìm các bề mặt nên đổ bóng. Từ bất kỳ điểm nào trong trò chơi, tôi cần tìm ra những khuôn mặt không được bao gồm hoặc toàn bộ ô.

Câu hỏi của tôi là, làm thế nào tôi có thể tìm thấy các gạch / cạnh này càng nhanh càng tốt cho một điểm?

Hình ảnh hiển thị đường ngắm chung và gạch bị ảnh hưởng

Câu trả lời:



2

Đây không phải là một câu trả lời hoàn chỉnh, nhưng hy vọng nó sẽ giúp ích.

Bản đồ / gạch của bạn được đặt tĩnh hay động? Nếu nó là tĩnh, tôi rất khuyến khích bạn thực hiện xử lý ngoại tuyến và tính toán trước càng nhiều càng tốt theo cách đó. Bạn có thể làm điều đó theo bất kỳ cách nào bạn muốn (raycasting hoặc thứ gì đó thông minh hơn), nhưng bạn không thực sự quan tâm đến việc thực hiện rất nhanh bởi vì tất cả sẽ xảy ra ngoại tuyến trong khi bạn "nướng" các cấp độ của mình. Bạn có thể tính toán chính xác các ô có thể nhìn thấy từ mỗi vị trí hoặc tạo một số loại vùng lớn hơn và tất cả các ô có khả năng hiển thị từ mỗi vùng.

Sau đó, trong thời gian chạy, truy vấn cho các ô hiển thị sẽ rất đơn giản và rất nhanh.

Tất nhiên, nếu bạn đang có các cấp được tạo động, thì điều này hoàn toàn không áp dụng :-)


1

Bạn có thể thấy cách tôi triển khai điều này cho một roguelike C # ở đây . Mã không được tối ưu hóa cao, nhưng dường như nó đủ nhanh đối với tôi và (quan trọng hơn) nên khá dễ đọc. Về cơ bản, nó đang thực hiện một thuật toán đúc bóng đơn giản, hoạt động một quãng tám tại một thời điểm.


0

Tôi không chắc chắn bạn đang sử dụng nền tảng nào, nhưng tôi thực sự không thể nghĩ ra bất kỳ nền tảng nào sẽ không đủ nhanh để phát triển một vòng tròn xung quanh các thực thể phát sáng của bạn (trừ khi có rất nhiều em) và phát hiện xem lát sắp được 'vẽ' trong thuật toán vòng tròn của bạn là một khối đặc và do đó che chắn ánh sáng. Từ đó trở đi sẽ khó khăn hơn một chút vì bạn phải theo dõi các phân đoạn vòng tròn có bị che khuất hay không, nhưng đó sẽ là những gì tôi sẽ làm. Một lựa chọn khác là chiếu các tia trong một vòng tròn (một lần nữa khá nhanh) trong không gian độ phân giải của khối và dừng từng tia khi nó chạm vào một khối đặc.


Chà, tôi chủ yếu làm các trò chơi Flash và Javascript, nhưng hiện tại, tôi thực hiện một loại phương pháp vũ phu bắt đầu sa lầy sau một lát. Tôi nghĩ rằng nếu tôi có thể tìm ra cách tối ưu hóa nó, tôi có thể khiến trò chơi này chạy khá trơn tru.
Ryan S

Nó có thể dễ dàng thực hiện trong flash, có thể lực lượng vũ phu của bạn có thể được tối ưu hóa. Ngoài ra, nói chung, bạn không phải cập nhật mọi khung hình, vì vậy bạn có thể tính toán trước tình huống tiếp theo qua một vài khung hình
Kaj
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.