Kiểm soát thời gian của người dùng trong một nền tảng 2d


9

Tôi đang tạo một platformer 2d nơi người chơi có thể nhấn nút và khởi động lại cấp độ, chỉ có nhân vật trước đó của họ cũng sẽ chạy cấp độ cùng một lúc, giống như họ đang du hành ngược thời gian.

Tôi biết các trò chơi khác đã làm điều này trước đây và cách tôi nghĩ là làm cho nhân vật trò chơi có một bộ hành động (Nhàn rỗi, Nhảy, Đi lại, v.v.) và sau đó phát hiện các thay đổi trong các hành động đó và đăng nhập chúng vào một danh sách cùng với thời gian trò chơi. Vì vậy, khi tôi cần nhân vật tự chạy lại cấp độ, tôi có thể xem qua danh sách thay đổi hành động của mình vào đúng thời điểm.

Đây có phải là cách tốt nhất để làm điều đó? Có ai có bất kỳ kinh nghiệm trong việc này?

Cảm ơn.


Những gì bạn đang tìm kiếm là một 'Phát lại' hơn là kiểm soát thời gian. Bạn có thể tìm thấy một số bài viết hay về các cách để giải quyết vấn đề này, nhưng tôi vẫn nói câu trả lời dưới đây cũng là một khởi đầu tốt trong lĩnh vực này. Hãy nhớ rằng những thứ 'ngẫu nhiên' trong trò chơi sẽ làm hỏng các replay cho nhân vật 'ma' chạy lại nếu chúng có thể ảnh hưởng đến tiến trình.
James

3
Điểm tốt về các phần "ngẫu nhiên". Hãy chắc chắn sử dụng một trình tạo ngẫu nhiên tạo ra số của nó dựa trên một hạt giống. Sau đó lưu hạt giống với phát lại của bạn và sử dụng cùng một hạt giống khi chơi phát lại đó.
bummzack

Làm thế nào bạn làm điều này? Cách giải quyết của bạn là gì?

Câu trả lời:


8

BIÊN TẬP:

Vui lòng xem câu trả lời của @ Bluescrn cho câu hỏi này; ông xây dựng các điểm yếu trong việc phát lại các điều khiển thay vì các vectơ chuyển động hoặc vị trí.

-

Bạn đang đi đúng hướng. Đây là cách tiếp cận tôi sử dụng:

Bộ điều khiển

Tạo một lớp Trình điều khiển nhận đầu vào bàn phím và chuyển nó vào nhân vật của bạn. Tuy nhiên, cũng có một bản ghi Bộ điều khiển chính xác khi các phím quan trọng (ví dụ như mũi tên, nhảy, v.v.) được nhấn và khi chúng được phát hành. Nó sẽ lưu trữ loại thông tin này:

actions[0].milliseconds = 400     actions[0].action = right pressed
actions[1].milliseconds = 1000    actions[1].action = jump pressed
actions[2].milliseconds = 1300    actions[2].action = jump released
actions[3].milliseconds = 2500    actions[3].action = jump pressed
actions[4].milliseconds = 3000    actions[4].action = jump released
actions[5].milliseconds = 5330    actions[5].action = right released

Bộ điều khiển có hai chế độ:

  1. Ghi: Nhận đầu vào bàn phím. Ghi lại đầu vào trong danh sách. Đưa tay nhập ký tự dựa trên trạng thái bàn phím.
  2. Phát lại: Bỏ qua đầu vào bàn phím. Tiến bộ thông qua danh sách theo mili giây trôi qua kể từ khi cấp độ bắt đầu. Đưa tay nhập ký tự dựa trên trạng thái bàn phím đã ghi tại thời điểm hiện tại.

Nhân vật

Khi đối tượng Nhân vật của bạn được xây dựng, nó sẽ tạo một Trình điều khiển mới cho chính nó. Nhân vật có thể ở một trong hai chế độ bất cứ lúc nào:

  1. Hoạt động: Chỉ có một Nhân vật hoạt động và đó là nhân vật bạn điều khiển. Khi Nhân vật ở chế độ Hoạt động, Bộ điều khiển của nó ở chế độ Ghi. Theo mặc định khi một Nhân vật được xây dựng, nó ở chế độ Hoạt động.
  2. Ghost: Đây là một trong đó phát lại hành động trong quá khứ của bạn. Khi một Nhân vật vào chế độ Ghost, nó sẽ thay đổi diện mạo và đặt Bộ điều khiển thành chế độ Phát lại.

Cấp độ

Một cấp độ mới bắt đầu

Khi bạn bắt đầu cấp độ, tạo một Nhân vật duy nhất. Bây giờ cấp độ bắt đầu và người chơi làm việc của mình.

Khi thời gian đặt lại

Khi cấp độ đặt lại, làm ba điều:

  1. Nói với nhân vật hoạt động hiện tại để vào chế độ Ghost.
  2. Tạo một nhân vật mới.
  3. Gọi tất cả các nhân vật để thiết lập lại chính họ. Điều này sẽ đặt chúng trở lại vị trí bắt đầu mà không có chuyển động, v.v. Họ sẽ lần lượt nói với Bộ điều khiển của mình để đặt lại về mili giây 0 mà không cần nhấn phím.

Sau đó, cấp độ bắt đầu và người chơi làm việc của mình.


Điều này là hoàn toàn rõ ràng. Cảm ơn rất nhiều. Tôi đã có ý tưởng đúng, nhưng tôi sẽ tạo ra một hệ thống trung tâm để ghi nhật ký chuyển động, nhưng để mỗi nhân vật ghi lại chuyển động của riêng mình là cách dễ dàng hơn nhiều để thực hiện. Cảm ơn.
Woody Zantzinger

8

Nếu bạn đang phát lại các đầu vào được ghi lại, hãy xem xét tác động của bất kỳ đối tượng di chuyển / phá hủy / tương tác nào trên thế giới, có thể đã di chuyển hoặc thay đổi trạng thái khi các hành động được phát lại

Ngoài ra, phát lại đầu vào sẽ không hoạt động chính xác nếu trò chơi của bạn sử dụng dấu thời gian thay đổi. Bạn có thể muốn xem xét một bản cập nhật trò chơi có dấu thời gian cố định (với phép nội suy cho kết xuất khung hình biến đổi)?


1
+10 nếu tôi có thể. Những cân nhắc tuyệt vời. Phát lại các vectơ chuyển động hoặc vị trí sẽ tốt hơn so với phát lại đầu vào, tùy thuộc vào hiệu ứng mong muốn. Hàng chục mili giây không chính xác giữa các khung có lẽ dễ dàng được tính đến khi làm việc với chuyển động và vị trí hơn so với đầu vào.
doppelgreener


0

Ghi lại đầu vào bàn phím có thể không hữu ích trong trường hợp của bạn. Tuy nhiên, bạn có thể tạo một spline với dòng thời gian. Bạn thậm chí có thể tua lại thời gian nếu bạn khéo léo với các lực mà bạn cần áp dụ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.