Tôi sẽ đi thẳng ra và nói rằng tôi không biết cách giải quyết vấn đề mà bạn đã mô tả trong câu hỏi (phát hiện va chạm giữa các hình chữ nhật hình gạch), nhưng tôi có thể cho bạn biết những người khác đã giải quyết nó như thế nào trong quá khứ :
Cách thức thực hiện trong các trò chơi khác là tách thế giới trò chơi khỏi thế giới màn hình . Khi bạn bắt đầu, người ta thường tưởng tượng chúng giống nhau, nhưng sau đó nó sẽ dẫn đến những vấn đề giống như bạn đang mô tả.
Ý tưởng chung là thế giới trò chơi được lưu trữ hoàn toàn trong bộ nhớ, đằng sau hậu trường, đó chỉ là những con số, tài liệu tham khảo và logic. Việc bạn đang vẽ thế giới trò chơi bằng isometric là không liên quan. Thế giới trò chơi của bạn không nên có khái niệm đẳng cự, hoặc hình vuông hoặc ngay cả khi màn hình được vẽ dưới dạng 3D. Tất cả điều đó được quan tâm khi bạn vẽ thế giới trò chơi lên màn hình (hay còn gọi là thế giới màn hình ). Thế giới trò chơi nên được lưu trữ và duy trì theo cách đơn giản nhất có ý nghĩa đối với trò chơi, trong các trò chơi đẳng cự, bạn thường hoàn toàn bỏ qua thực tế rằng đó là iso và thay vào đó lưu trữ các vị trí như thể bạn đang sử dụng lưới được căn chỉnh theo trục. Hầu hết các trò chơi sẽ có phương thức chuyển đổi tọa độ giữa hai thế giới, tôi gọi là của tôi ScreenToWorld(x, y)
vàWorldToScreen(x, y)
. Việc chuyển đổi thường được thực hiện với toán học Ma trận, nhưng có thể đạt được các cách khác. Bạn sẽ sử dụng ScreenToWorld khi bạn sử dụng chuột và WorldToScreen khi bạn vẽ.
Có một số lợi thế để phân chia thế giới trò chơi và thế giới màn hình . Một trong những lợi thế là phát hiện va chạm và chuyển động đều xảy ra trong thế giới trò chơi, và do đó thường khá đơn giản vì bạn không xử lý lưới nghiêng, hoặc tọa độ lệch, hoặc nơi có màn hình, v.v. , bạn sẽ xử lý các hình chữ nhật và hình vuông được căn chỉnh theo trục. Khi thế giới trò chơi đã được cập nhật, sau đó bạn vẽ một đại diện của thế giới trò chơi lên màn hình, từ khóa: đại diện. Thoạt nhìn có vẻ phản trực giác, nhưng màn hình của bạn chỉ là đại diện cho những gì đang diễn ra trong thế giới trò chơi. Điều này làm cho những thứ như máy chủ chuyên dụng và máy khách giống như thiết bị đầu cuối có thể.
FreeCiv thực sự là một ví dụ tuyệt vời về tất cả những điều này. Bạn có thể xem thế giới chính xác giống như bất kỳ thế giới nào: Lưới Bắc / Nam vuông, Isometric hoặc thậm chí Hex. Mỗi trò chơi bạn chạy đều có một máy chủ chuyên dụng chạy trong nền, ngay cả đối với các trò chơi một người chơi, do đó, máy khách cũng chỉ là một cổng hiển thị, không có gì hơn.
Câu chuyện dài: Tách thế giới trò chơi và logic khỏi thế giới màn hình giúp đơn giản hóa logic trò chơi, giảm trò chơi <-> khớp nối hiển thị và lần lượt giúp phát hiện va chạm giữa các ô "iso" dễ xử lý và dễ hình dung hơn.