Về mặt khái niệm, phát lại hoạt động như thế nào trong một trò chơi?


145

Tôi hơi tò mò về cách phát lại có thể được thực hiện trong một trò chơi.

Ban đầu, tôi nghĩ rằng sẽ chỉ có một danh sách lệnh cho mọi hành động của người chơi / ai được thực hiện trong trò chơi, sau đó nó sẽ chơi lại trò chơi và cho phép động cơ hiển thị như bình thường. Tuy nhiên, tôi đã xem xét replay trong FPS / RTS game, và khi kiểm tra cẩn thận, ngay cả những thứ như các hạt và đồ họa / trục trặc âm thanh phù hợp (và những trục trặc thường phù hợp).

Vậy nó diễn ra như thế nào. Trong các trò chơi góc máy ảnh cố định, mặc dù tôi chỉ có thể ghi mọi khung hình của toàn bộ cảnh vào luồng được lưu trữ và sau đó chỉ phát lại luồng đó, nhưng dường như điều đó không đủ cho các trò chơi cho phép bạn tạm dừng và di chuyển máy ảnh xung quanh. Bạn sẽ phải lưu trữ vị trí của mọi thứ trong cảnh tại mọi thời điểm (Không?). Vì vậy, đối với những thứ như các hạt, đó là rất nhiều dữ liệu để đẩy, có vẻ như là một sự thu hút đáng kể về hiệu suất của trò chơi trong khi chơi.


10
Trả lời Star Craft gốc trong thực tế KHÔNG nhất quán. Bạn có thể xem cùng một trò chơi hai lần và thấy một số kết quả khá khác nhau.
Andres

1
@Andres: Thú vị, tôi đã không nhận thấy. Đặc biệt, đối với thể loại RTS, tôi đã nghĩ đến Company Of Heroes.
Steven Evers

4
Để làm rõ những gì tôi tin SnOrfus đang hỏi: Một số trò chơi (Uncharted 2, Halo 3, thậm chí Battlefield 2) cho phép bạn ghi lại toàn bộ trò chơi. Sau khi trò chơi kết thúc, bạn có thể chơi lại với tốc độ được chỉ định và bay qua cấp độ khi hành động đang diễn ra, xem nó từ bất kỳ vị trí nào trên bản đồ. Vì vậy, tôi cho rằng đó là về việc ghi lại chuyển động của tất cả người chơi / đối tượng và không liên quan gì đến bộ đệm video.
Sean

1
@Sean O'Hollaren: Vâng, điều đó đúng.
Steven Evers

1
Sau đó, tôi cũng sẽ thêm vào các trò chơi đua xe trong đó replay gần như mặc định. Tôi khá chắc chắn vị trí của các mô hình được ghi lại và sau đó mọi thứ chỉ được chạy qua động cơ.
d -_- b

Câu trả lời:


61

Tôi nghĩ rằng suy nghĩ ban đầu của bạn là chính xác. Để tạo phát lại, bạn lưu trữ tất cả đầu vào nhận được từ người dùng (cùng với số khung mà nó nhận được) cùng với các hạt ban đầu của bất kỳ trình tạo số ngẫu nhiên nào. Để phát lại trò chơi, bạn đặt lại PRNG của mình bằng cách sử dụng các hạt giống đã lưu và cung cấp cho công cụ trò chơi cùng một chuỗi đầu vào (được đồng bộ hóa với số khung). Vì nhiều trò chơi sẽ cập nhật trạng thái trò chơi dựa trên lượng thời gian trôi qua giữa các khung, nên bạn cũng có thể cần lưu trữ độ dài của mỗi khung.


Số khung có thể không phải là một tài liệu tham khảo tốt vì phát lại có thể chạy ở tốc độ khung hình khác với trò chơi trực tiếp.
Ben S

5
@Ben: Fram Cả không tạo ra sự khác biệt, vì số khung vẫn sẽ giống nhau. Đây là câu trả lời chính xác.
BlueRaja - Daniel Pflughoeft

14
Khung đồ họa và 'khung' động cơ (hoặc lặp) không nhất thiết phải giống nhau. Trong nhiều trò chơi cũ, công cụ cập nhật với tốc độ tương tự như đồ họa, trong một vòng lặp chính. Với các công cụ hiện đại, đồ họa thường được phép cập nhật nhanh như GPU cho phép, với công cụ tích tắc ở mức cần thiết để có độ phân giải tốt, ổn định của động lực trò chơi (thường là công cụ vật lý).
Dan Bryant

3
@iamgopal: nếu bạn biết trạng thái của trình tạo số giả ngẫu nhiên, thì vấn đề đó đã được giải quyết. Một phương pháp khác có thể là coi các số ngẫu nhiên là một dạng đầu vào khác và lưu chúng cùng với các phím bấm và tương tự.
Kylotan

1
Tôi muốn quảng cáo rằng phương pháp này đòi hỏi rằng công cụ trò chơi của bạn mang tính quyết định và nó hoạt động với một bước thời gian cố định. Tôi tin rằng tất cả các trò chơi RTS của Blizzard đã được xây dựng theo cách này. Các trò chơi không xác định sẽ bao gồm dữ liệu đồng bộ hóa bổ sung để đảm bảo tính nhất quán trong thời gian dài.
John Leidegren

28

Starcraft và Starcraft: Brood War có tính năng phát lại. Sau khi trận đấu kết thúc, bạn có thể chọn lưu lại để xem sau. Trong khi phát lại, bạn có thể cuộn quanh bản đồ và nhấp vào các đơn vị và tòa nhà, nhưng không thay đổi hành vi của họ.

Tôi nhớ có lần xem một trận đấu lại của trận đấu đã được chơi trong trò chơi gốc, nhưng trận đấu lại được xem trong Brood War. Đối với những người không quen thuộc, Brood War chứa tất cả các đơn vị và tòa nhà ban đầu, cũng như nhiều loại mới. Trong trò chơi gốc, người chơi đã đánh bại máy tính bằng cách tạo ra các đơn vị mà máy tính không thể dễ dàng truy cập. Khi tôi chơi phát lại trong Brood War, máy tính có quyền truy cập vào các đơn vị khác nhau, thứ mà nó tạo ra và sử dụng để đánh bại người chơi. Vì vậy, cùng một tệp phát lại chính xác dẫn đến một người chiến thắng khác nhau tùy thuộc vào phiên bản Starcraft nào đang phát tệp.

Tôi luôn luôn tìm thấy khái niệm hấp dẫn. Dường như tính năng phát lại hoạt động bằng cách ghi lại tất cả các yếu tố đầu vào của người chơi và cho rằng máy tính sẽ phản ứng với những kích thích đó theo cùng một cách chính xác mỗi lần. Khi đầu vào của người chơi được đưa vào trình phát lại Starcraft gốc, trò chơi sẽ diễn ra chính xác như trong trận đấu ban đầu. Khi cùng một đầu vào chính xác được đưa vào trình phát lại Brood War, máy tính đã phản ứng khác nhau, tạo ra các đơn vị mạnh hơn và giành chiến thắng trong trò chơi.

Một số điều cần lưu ý nếu bạn đang viết một công cụ phát lại.


6
+1: Rất thú vị. Tôi chưa bao giờ nghe về điều đó. Cung cấp một số hiểu biết tốt về cách họ phát triển nó.
Steven Evers

18

Có hai phương pháp chính:

  1. Lưu trữ các sự kiện (chẳng hạn như hành động của người chơi / ai) - giống như bạn nói.
  2. Trạng thái lưu trữ (trạng thái trò chơi đầy đủ, vị trí của các đối tượng, trong các khoảnh khắc liên tiếp).

Nó phụ thuộc vào những gì bạn muốn làm. Đôi khi lưu trữ các sự kiện là tốt hơn, bởi vì điều này thường chiếm ít bộ nhớ hơn. Mặt khác, nếu bạn muốn cung cấp replay có thể được phát ở các tốc độ khác nhau và từ các điểm bắt đầu khác nhau, tốt hơn là lưu trữ các trạng thái. Khi lưu trữ trạng thái, bạn cũng có thể quyết định lưu trữ chúng sau mỗi sự kiện hay chỉ 12 hoặc 25 lần mỗi giây - điều này có thể làm giảm kích thước phát lại của bạn và giúp tua lại / tua nhanh hơn dễ dàng hơn.

Lưu ý rằng "trạng thái" không có nghĩa là trạng thái đồ họa. Thêm một cái gì đó như vị trí đơn vị, trạng thái của tài nguyên và như vậy. Những thứ như đồ họa, hệ thống hạt vân vân thường mang tính quyết định và có thể được lưu trữ dưới dạng "hoạt hình X, thời gian Y: Z".

Đôi khi replay được sử dụng như sơ đồ chống ăn mòn. Sau đó lưu trữ các sự kiện có lẽ là tốt nhất ở đây.


10

Về mặt kỹ thuật, bạn nên viết công cụ của mình để xác định, đó không phải là ngẫu nhiên. Giả sử một nhân vật trong trò chơi đang nhắm vào cánh tay của đối thủ và bắn vũ khí, thì cùng một lượng sát thương sẽ được áp dụng cho đối thủ trong mọi trường hợp.

Giả sử một quả bom phát nổ tại vị trí X, các hạt được tạo ra bởi vụ nổ đó sẽ luôn dẫn đến kết quả hình ảnh tương tự. Nếu bạn cần tính ngẫu nhiên, hãy tạo một tập hợp các số ngẫu nhiên, chọn giá trị hạt giống khi trò chơi được chơi và lưu giá trị hạt giống đó trong phát lại.

Nói chung có sự ngẫu nhiên trong một trò chơi là một ý tưởng tồi. Ngay cả đối với những thứ như nhiều người chơi, bạn không thể có một nửa người chơi của mình có thể nhìn thấy xung quanh vụ nổ trong khi những người khác không thể đơn giản vì họ không nhận được giá trị ngẫu nhiên phù hợp.

Làm cho mọi thứ quyết định, và bạn sẽ ổn.


1
AI thì sao? Có phải AI không ngẫu nhiên?
Jesse Jashinsky

18
Điều đó thực sự không cần thiết. Sử dụng số giả ngẫu nhiên được gieo hạt giống cho tất cả các sự kiện ngẫu nhiên và lưu hạt giống trong tệp phát lại. Bằng cách đó, các số "ngẫu nhiên" tương tự sẽ được tạo ra trong khi phát lại.
Ben S

13
-1 cho sự hiểu lầm rõ ràng về cách "tính ngẫu nhiên" hoạt động trong máy tính
BlueRaja - Danny Pflughoeft

10
ừm .... không .... tôi hoàn toàn biết rằng không có thứ gọi là "ngẫu nhiên" thực sự. Tuy nhiên, hầu hết mọi người cố gắng khắc phục điều này bằng cách đặt hạt giống ngẫu nhiên của họ thành một cái gì đó giống như thời gian hệ thống. Tuy nhiên điều tôi đang nói là một việc như vậy không nên làm. Tôi không quan tâm nếu anh ta sử dụng API hệ thống hoặc bảng số ngẫu nhiên được xác định trước. Những gì tôi nói ban đầu là chính xác. Mọi chức năng trong động cơ của anh ta sẽ tạo ra cùng một kết quả dựa trên các đầu vào của nó. Thời gian không bao giờ nên là một yếu tố.
Timothy Baldridge

2
Nếu các hạt không có tương tác với cơ chế trò chơi theo bất kỳ cách có ý nghĩa nào, thì điều đó thực sự không quan trọng nếu RNG khác với chúng. Điều này sẽ giúp ích trong trường hợp mô phỏng được đồng bộ hóa mạng (như trường hợp của hầu hết các trò chơi RTS và rất nhiều thể loại trò chơi khác), vì mô phỏng phải ít hơn một chút để đồng bộ hóa mọi khung hình (hiệu ứng hạt chỉ nhận được cập nhật riêng lẻ).
RCIX

10

Với trạng thái ban đầu và một loạt các hành động có dấu thời gian , chỉ cần thực hiện theo trình tự vì các hành động được ghi lại được cho là xảy ra có một phát lại.

Để có được các sự kiện ngẫu nhiên xảy ra lại giống hệt nhau, hãy sử dụng các số giả ngẫu nhiên được gieo hạt giống và lưu hạt giống trong tệp phát lại.

Miễn là bạn sử dụng cùng một thuật toán để tạo các số ngẫu nhiên từ hạt giống, bạn có thể tạo lại tất cả các sự kiện giống như chúng xảy ra trong trò chơi trực tiếp mà không cần ảnh chụp nhanh về trạng thái trò chơi.

Điều này sẽ yêu cầu phát lại để được xem liên tục , nhưng điều đó khá bình thường đối với phát lại trò chơi (xem Starcraft 2). Nếu bạn muốn cho phép truy cập ngẫu nhiên vào dòng thời gian, bạn có thể chụp ảnh toàn trạng thái theo các khoảng thời gian đã đặt (nói mỗi phút), để nhảy xung quanh dòng thời gian ở mức độ chi tiết đã đặt.


Nếu bạn gieo lại từng số giây nhất định (giả sử 5 hoặc 10), bạn có thể dễ dàng ghi lại luồng phát lại của mình và cũng cho phép nhảy về phía trước hoặc lùi lại (về cơ bản là "khung chính" của PRNG).
Nêm

7

NVidia PhysX (một công cụ mô phỏng vật lý thường được sử dụng trong các trò chơi) có khả năng ghi lại toàn bộ trạng thái của cảnh vật lý theo thời gian. Điều này kết hợp bất kỳ đầu vào lái xe nào từ công cụ trò chơi, điều đó có nghĩa là bạn không cần theo dõi các số hạt ngẫu nhiên như những người khác đã đề xuất. Nếu bạn thực hiện kết xuất cảnh này, bạn có thể phát lại nó trong một công cụ bên ngoài (do NVidia cung cấp), rất thuận tiện để theo dõi các vấn đề với các mô hình vật lý của bạn. Tuy nhiên, bạn cũng có thể sử dụng cùng một luồng vật lý để điều khiển công cụ đồ họa của mình, điều này sau đó sẽ cho phép bạn điều khiển máy ảnh bình thường, vì chỉ có vật lý điều khiển đồ họa đã được ghi lại. Trong nhiều trò chơi, điều này bao gồm các hiệu ứng hạt (PhysX bao gồm một số hệ thống hạt rất tinh vi.) Về âm thanh, tôi đoán đó là ghi lại nguyên văn (như một luồng âm thanh), nhưng tôi '


4

Ý tưởng ban đầu của bạn là đúng và đối với các hiệu ứng thực sự phức tạp, chúng không được ghi nhớ riêng. Ví dụ, hệ thống phát lại Warcraft 3 không lưu trữ trạng thái hoạt hình hoặc hiệu ứng hạt trong trường hợp hiệu ứng ngẫu nhiên, v.v. Bên cạnh đó, những thứ MOST có thể được tính toán từ điểm bắt đầu theo cách xác định, vì vậy đối với hầu hết các hệ thống sử dụng các biến ngẫu nhiên (ví dụ vụ nổ hạt mang lại sự bù ngẫu nhiên), tất cả những gì bạn cần là thời gian của hiệu ứng và hạt giống ngẫu nhiên. Sau đó, bạn có thể tạo lại hiệu ứng mà không thực sự biết nó sẽ trông như thế nào .. biết rằng nó đang đi qua một đường dẫn mã xác định.

Nghĩ về nó hoàn toàn theo khái niệm, để phát lại dòng thời gian của các sự kiện, tất cả những gì bạn cần là hành động của người dùng. Chương trình sẽ phản ứng chính xác theo cùng một cách, ngoại trừ trong trường hợp các biến ngẫu nhiên. Trong trường hợp này, bạn có thể bỏ qua tính ngẫu nhiên (có thực sự quan trọng không nếu các hiệu ứng trông giống hệt nhau, hoặc chúng có thể được tạo lại ngẫu nhiên), hoặc lưu trữ giá trị hạt giống và giả ngẫu nhiên.


3

Ném hai xu của tôi vào.

Phụ thuộc vào những gì bạn muốn, phát lại có thể được thực hiện thông qua

  1. Ghi lại bộ đệm video và phát lại sau,
  2. Chụp đối tượng trạng thái mọi khung hình và phát lại sau,

Hầu hết thời gian, mọi người muốn một phát lại tương tác, vì vậy 2. là cách để đi. Sau đó, tùy thuộc vào các ràng buộc của bạn, có một số cách để tối ưu hóa quy trình này

  • đảm bảo hệ thống là một mô phỏng xác định *, sao cho mọi đầu vào đều tạo ra đầu ra nhất quán và mong đợi
  • nếu tính ngẫu nhiên là bắt buộc, đảm bảo số ngẫu nhiên có thể được sao chép chính xác vào lần sau [xem xét gieo hạt bằng Máy tạo số ngẫu nhiên giả PRNG hoặc sử dụng bộ ngẫu nhiên đóng hộp]
  • chia các yếu tố trò chơi thành các yếu tố "cơ học" và "thẩm mỹ". các yếu tố cơ học ảnh hưởng đến kết quả [ví dụ: cột rơi xuống và chặn đường], các yếu tố thẩm mỹ là để hiển thị và không ảnh hưởng đến bất kỳ quá trình ra quyết định nào trong hệ thống [ví dụ như hiệu ứng hạt thị giác như tia lửa].

Nó thực sự là một chủ đề hấp dẫn. Tôi nhớ rằng một tựa game ra mắt cho Xbox Wreckless ban đầu có tính năng phát lại tốt. Thật không may, trong hơn một lần, phát lại sẽ làm hỏng;)

oh yeah, làm thế nào có ai có thể quên Blinx Time Sweeper ! phát lại tương tác tuyệt vời đã được tích hợp vào cơ chế trò chơi thực tế!


* = dường như có một số ý kiến ​​liên quan đến bước thời gian. tôi đang sử dụng "mô phỏng" ở đây để nắm bắt tính năng này. ở cốt lõi, động cơ của bạn cần có khả năng tạo ra các khung thời gian riêng biệt. ngay cả khi khung phát lại mất nhiều thời gian hơn hoặc ngắn hơn để xử lý so với bản gốc, hệ thống phải nhận thấy rằng đồng bằng thời gian đã trôi qua. điều này có nghĩa là ghi lại bước thời gian của khung với mỗi đầu vào được ghi và cung cấp delta này cho đồng hồ động cơ của bạn.


2

Có lẽ bạn chỉ cần lưu một đống lệnh được gửi bởi mỗi người chơi. Vì vậy, thay vì tiết kiệm rằng một quả bom phát nổ tại một thời điểm và thời điểm nhất định hoặc một chiếc xe nào đó bị phá hủy, bạn chỉ cần lưu các phím bấm được gửi bởi mỗi người chơi. Sau đó, trong phát lại, bạn chỉ cần mô phỏng trò chơi như nó đã xảy ra với những lần nhấn đó. Tôi cảm thấy như thế có khả năng chiếm ít không gian hơn, nhưng tôi chưa bao giờ làm việc trên một hệ thống phát lại như thế.

Câu hỏi thú vị, mặc dù. Tôi sẽ quan tâm đến cách nó được thực hiện trong các trò chơi chuyên nghiệp.


2

Dan Bryant

Hơn nữa, ghi lại các hạt ngẫu nhiên sẽ không đủ để hỗ trợ tua lại, vì tiến trình ngẫu nhiên không phải là một thủ tục có thể đảo ngược mà không có sự hỗ trợ đặc biệt trong tất cả các logic dựa vào tính ngẫu nhiên. Nó linh hoạt hơn để ghi lại kết quả của các hoạt động ngẫu nhiên như là một phần của luồng sự kiện.

Đó chính xác là những gì tôi nghĩ lúc đầu khi tôi cố gắng tìm ra cách họ làm nó để trò chơi phát lại luôn giống nhau mỗi lần. Với Doom tôi đã nghĩ rằng các cảnh quay ngẫu nhiên như thế nào: D. Lưu trữ bất kỳ số ngẫu nhiên đã được sử dụng, tôi phát hiện ra nó có thể là một giải pháp. Đó là trước khi tôi bắt gặp một bài báo pdf về công nghệ Crysis. Một số kết cấu tiếng ồn ở đó và cách xử lý cỏ hoặc cây, dường như đang sử dụng giả ngẫu nhiên với hạt giống có thể đảo ngược cố định để làm cho bạn không thấy sự thay đổi của tiếng ồn, cây và cỏ bất cứ lúc nào bạn nhìn!

Tránh cùng một lúc, để lưu trữ hàng triệu cây và vị trí trục cỏ. Rõ ràng chuỗi giả ngẫu nhiên có thể phát lại giống nhau bất cứ lúc nào, vì logic được cố định, để tạo ra một chuỗi số ngẫu nhiên thống kê giả.


Nếu bạn muốn thu hút sự chú ý của Dan về điều này, hãy thêm một nhận xét dưới sự đóng góp của anh ấy - nếu không anh ấy sẽ không nhìn thấy nó.
halfer

Có thể vì tôi chỉ là khách, nhưng tôi không thể thấy bất kỳ chức năng "thêm bình luận" nào trong bài đăng của phụ huynh, Dan trả lời, chứ đừng nói đến câu trả lời của Dan. Tôi thấy có một chức năng cải thiện chỉnh sửa, ngay cả đối với các bài đăng không phải của tôi, nhưng nó hoạt động như thế nào?
Từ trái nghĩa

À, câu hỏi hay! Nó dường như ở đây mà bạn cần 50 điểm đại diện cho bình luận về câu hỏi hoặc câu trả lời khác hơn là của riêng của bạn - lời xin lỗi của tôi. 50 là rất dễ dàng để có được mặc dù - chỉ cần một vài đóng góp hữu ích thường sẽ đạt được điều đó. Có, bạn có thể chỉnh sửa câu hỏi và câu trả lời của người khác, mặc dù các chỉnh sửa của bạn sẽ được người khác xem xét cho đến khi bạn đến năm 2000. Xem biểu đồ đặc quyền của bạn tại đây .
halfer

1

Vấn đề có một phát lại nhất quán là giống nhau (tốt, dễ dàng hơn) giống như có một trò chơi nhiều người chơi nhất quán.

Như những người khác đã đề cập trước đó, phát lại trong các trò chơi RTS được lưu trữ bằng cách ghi lại tất cả đầu vào (có tác dụng. Cuộn không có tác dụng.) Nhiều người chơi cũng truyền tất cả đầu vào

Ghi lại tất cả đầu vào không chỉ là phỏng đoán - có một thư viện để đọc replay Warcraft3 với tiết lộ điều này.

đầu vào bao gồm dấu thời gian cho câu trả lời này.


Không, nó không giống (hoặc dễ dàng hơn) như một game MP nhất quán. Khi bạn đang chơi MP, các trò chơi thường yêu cầu mọi người đều có cùng một phiên bản trò chơi, điều này không nhất thiết là trường hợp được lưu trữ (vì có thể nó đã được lưu trữ với phiên bản cũ hơn của trò chơi). Điều này đặc biệt quan trọng nếu một trong những người chơi là đối thủ của AI. Chỉ cần tưởng tượng rằng bạn phát lại một trò chơi trong đó một đơn vị chỉ có thêm một điểm tấn công trong phiên bản mới hơn so với phiên bản mà nó đã được ghi lại. Điều này có thể dẫn đến một kết quả hoàn toàn khác.
drakon

-1

Tôi tin rằng ở một số mức tăng nhất định, trò chơi sẽ có một ảnh chụp nhanh về trạng thái của mọi thứ (MỌI THỨ). Sau đó, khi phát lại đang diễn ra việc sử dụng đơn giản nội suy tuyến tính có thể được sử dụng để điền vào các "lỗ hổng". Ít nhất đó là cách tôi nghĩ nó sẽ được thực hiện.

Bạn đúng rằng việc ghi lại các đầu vào sẽ không đáng tin cậy / không đảm bảo cùng một đầu ra. Trò chơi chắc chắn phải theo dõi trạng thái của tất cả các đối tượng (hoặc ít nhất là những đối tượng quan trọng)


2
Không, cho ăn cùng một đầu vào sẽ cho kết quả chính xác như lần đầu tiên. Bạn chỉ cần đảm bảo rằng bạn có được thời gian chính xác, cung cấp đầu vào nằm giữa các khung giống như lúc ban đầu nhận được. Việc lưu toàn bộ trạng thái trò chơi định kỳ có thể cần một lượng bộ nhớ khổng lồ và tạo ra kết quả không nhất quán.
Peter Ruderman

@Peter, "cho ăn cùng một đầu vào sẽ cho kết quả chính xác như nhau": không. Có một yếu tố ngẫu nhiên trong nhiều trò chơi, có thể khác nhau mỗi lần chơi lại. Bạn cần theo dõi nhiều hơn đầu vào.
houbysoft

Đúng. Bạn cũng cần lưu trữ các hạt giống PRNG của bạn (xem câu trả lời của tôi cho câu hỏi này).
Peter Ruderman

1
Tôi biết đó là hiệu năng và bộ nhớ tiêu thụ, nhưng nếu bạn bỏ lỡ 1 điều nhỏ như đầu vào hoặc bộ tạo ngẫu nhiên ... hoặc thực sự bất cứ điều gì, phát lại sẽ đi vào một tiếp tuyến khủng khiếp!
Bob Fincheimer

@BlueRaja, ý tưởng chụp nhanh bộ nhớ của Bob không nhất thiết phải là quá xa vời, mặc dù một công cụ tốt có thể ghi lại trạng thái 'deltas' thay vì mã hóa tất cả bộ nhớ cho mỗi lần lặp. Điều này có lẽ dễ dàng hơn để hỗ trợ ở cấp độ động cơ. Hơn nữa, ghi lại các hạt ngẫu nhiên sẽ không đủ để hỗ trợ tua lại, vì tiến trình ngẫu nhiên không phải là một thủ tục có thể đảo ngược mà không có sự hỗ trợ đặc biệt trong tất cả các logic dựa vào tính ngẫu nhiên. Nó linh hoạt hơn để ghi lại kết quả của các hoạt động ngẫu nhiên như là một phần của luồng sự kiện.
Dan Bryant
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.