Phong trào RPG từ trên xuống w / Correction?


27

Tôi hy vọng rằng tất cả chúng ta đã chơi Zelda: A Link to the Past, vui lòng sửa cho tôi nếu tôi sai, nhưng tôi muốn mô phỏng kiểu chuyển động nhân vật 2D, từ trên xuống dưới đó với một chút chỉnh sửa. Nó đã được thực hiện trong các trò chơi khác, nhưng tôi cảm thấy tài liệu tham khảo này sẽ dễ liên quan nhất. Cụ thể hơn, loại chuyển động và hiệu chỉnh mà tôi đang nói đến là:

  • Chuyển động nổi không bị hạn chế đối với chuyển động dựa trên gạch như Pokemon và các trò chơi khác trong đó một lần nhấn của bảng di chuyển sẽ di chuyển bạn một hình vuông theo hướng hồng y đó. Chuyển động nổi này sẽ có thể đạt được chuyển động chéo.
  • Nếu bạn đang đi về phía Tây và bạn đến một bức tường có đường chéo theo kiểu Đông Bắc / Tây Nam, bạn sẽ được điều chỉnh thành một phong trào Tây Nam ngay cả khi bạn tiếp tục giữ trái (Tây) trên bộ điều khiển. Điều này sẽ làm việc cho cả hai đường chéo sửa theo cả hai hướng.
  • Nếu bạn đi một vài pixel khi đi thẳng vào cửa hoặc hành lang, bạn sẽ được điều chỉnh thành đi bộ qua hành lang hoặc xuống hành lang, tức là va vào góc khiến bạn bị đẩy vào hành lang / cửa.

Tôi đã săn lùng những cách hiệu quả để đạt được điều này và không gặp may mắn. Để rõ ràng, tôi đang nói về chuyển động của nhân vật, không phải là chuyển động của NPC. Là tài nguyên của họ có sẵn trên loại phong trào này? Các phương trình hoặc thuật toán được giải thích trên wiki hoặc một cái gì đó?

Tôi đang sử dụng Khung XNA, có gì trong đó để trợ giúp việc này không?

Câu trả lời:


23

Vâng, điểm đầu tiên là dễ dàng. Bạn chỉ cần lưu trữ và thao tác vị trí của nhân vật trong tọa độ thế giới hoặc pixel thay vì tọa độ dựa trên ô xếp. Nếu bạn gặp vấn đề với điều này, có thể là do sự lựa chọn đại diện khó hiểu cho thế giới và không gian của bạn, vì vậy có lẽ bạn nên đăng thêm chi tiết về nó / hỏi một câu hỏi cụ thể, riêng biệt.

Đối với điểm thứ hai, cách tiếp cận trực tiếp nhất sẽ là lấy vectơ chuyển động (chuẩn hóa) của người chơi và thêm nó vào vectơ thông thường của tường, sau đó tái chuẩn hóa. Dấu hiệu của các thành phần của vectơ kết quả sẽ cho biết bức tường liên quan đến chuyển động của người chơi như thế nào trong khi vectơ chỉ ra hướng nào mà người chơi có thể di chuyển.

Đối với điểm thứ ba, giả sử bạn có hình chữ nhật va chạm cho cả tường và người chơi, bạn sẽ có thể xác định số lượng tiếp xúc hình chữ nhật va chạm của người chơi với hình chữ nhật va chạm của tường. Ví dụ, nếu người chơi đang di chuyển sang phải và chạm vào một bức tường thẳng đứng, bạn so sánh độ rộng trục Y của hình chữ nhật va chạm - nếu phạm vi của người chơi vượt quá phạm vi của bức tường theo một ngưỡng nào đó, hãy nói rằng 75% Y của người chơi phạm vi trục, sau đó bạn "lừa" người chơi về phía cửa.

Tôi đã đưa ra một số giả định hợp lý ở đây về cách mô hình đối tượng của bạn trông như thế nào trong mã của bạn và những kỹ thuật bạn đã chọn - phần lớn là do tính tổng quát của câu hỏi của bạn. Tôi đã cố gắng đề xuất các phương pháp đơn giản (mặc dù có lẽ không tối ưu) vì lý do tương tự. Nếu bạn có thể cung cấp thông tin cụ thể hơn, trong câu hỏi này hoặc trong một câu hỏi mới, tôi có thể cố gắng cung cấp thêm chi tiết hoặc một ý tưởng tốt hơn.


Vâng, nổi nhân vật xung quanh không phải là một vấn đề. Chỉ cần chắc chắn rằng mọi người thấy rằng đó là một yêu cầu. Bạn đã cho tôi câu trả lời chính: Gạch có vectơ! Tôi không thể tin rằng tôi đã không nghĩ về điều đó. Cảm ơn bạn.
Corey Ogburn

Trong zelda , họ chỉ có thể có một góc, vì vậy không cần tính toán các vectơ bình thường, đó chỉ là một trường hợp đặc biệt trong mã.
BlueRaja - Daniel Pflughoeft

Tôi không hiểu làm thế nào bạn đưa ra một vectơ. Nó sẽ trông như thế nào?
kiểm tra

Một lát có lẽ có dữ liệu như đồ họa của nó, cho dù nó có thể vượt qua được hay không, v.v ... đây chỉ là một lĩnh vực khác. Ví dụ: struct Tile {vector2 bình thường; ...} Giá trị của bình thường sẽ đi kèm với dữ liệu xác định ô xếp
Josh

@JoshPetrie Tái hiện điều này. Không phải một ô có thể được va chạm theo nhiều hướng cần phải có nhiều vectơ? Tôi không chắc tôi hiểu làm thế nào một gạch có thể có một vectơ duy nhất.
kiểm tra

4

Như một câu trả lời khả dĩ cho điểm thứ hai là chiếu vectơ chuyển động của người chơi dọc theo vectơ tường bằng cách sử dụng một sản phẩm chấm (ab * chuẩn hóa (b)). Sau đó, bạn nhận được một vectơ cho bạn biết cách di chuyển người chơi theo hướng tường bao xa và nếu bạn di chuyển người chơi theo vectơ đó, bạn sẽ có một 'đường trượt' dọc theo tường. Làm việc tốt cho tôi trong một dự án trò chơi trước đó.


3

Câu trả lời tuyệt vời cho Josh, nhưng tôi sẽ thêm một vài gợi ý: - Để biết thêm thông tin về việc trượt vào tường, hãy xem câu hỏi của tôi - từ câu trả lời này, tôi đã xoay sở để làm cho nó hoạt động thực sự độc đáo. - Nếu tôi không nhầm, khi đi lên màn hình Liên kết sẽ dễ dàng căn chỉnh với toàn bộ ô vuông ngang gần nhất. Bằng cách này khi bạn đến cửa, bạn có nhiều khả năng được xếp hàng đúng cách (có thể sai). - Để dễ dàng đi qua cửa, hãy đảm bảo hộp va chạm của nhân vật của bạn nhỏ hơn chiều rộng của cửa.


Hoặc có hộp va chạm có lẽ là một vòng tròn?
Oskar Duveborn

2

Để điều chỉnh cửa vào, bạn có thể làm cho vật va chạm cho cửa lớn hơn một chút so với hình ảnh của cửa. Điều này sẽ dẫn đến hiệu ứng tương tự do Josh đề xuất, nhưng không phải tính toán khoảng cách gần với hình chữ nhật va chạm của bức tường.

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.