Các kỹ thuật tốt để đồng bộ hóa các hành động chơi trò chơi với thời gian hoạt hình cụ thể?


10

Vì vậy, tôi đã gặp một vấn đề trong trò chơi mà tôi đang làm việc, nhưng dường như đó là một điều khá cơ bản có thể xuất hiện trong rất nhiều trò chơi.

Trò chơi của tôi yêu cầu một số chức năng chơi trò chơi xảy ra tại một thời điểm rất cụ thể trong khi hoạt hình nhân vật. Và như tiêu đề đã nói, tôi tự hỏi một số kỹ thuật tốt và chiến lược cơ bản để đồng bộ hóa các sự kiện / chức năng / hành động liên quan đến trò chơi với các điểm cụ thể trong hoạt hình của nhân vật là gì.

Dưới đây là một số ví dụ đơn giản về những gì tôi đang nói về các loại trò chơi khác nhau:

  • Nhân vật của bạn tải lại súng của họ trong một game bắn súng . Nhân vật của bạn phát hoạt hình 'tải lại' của anh ấy / cô ấy, nhưng điều quan trọng là chức năng thiết lập biếnAmmo hiện tại chỉ được gọi vào đúng thời điểm sau khi tạp chí bị tráo đổi và súng được bắn. Đây có thể là một số điểm ở giữa của hoạt hình tải lại.

  • Trong một game nhập vai theo lượt, các nhân vật của bạn đứng thành hàng đối diện với hàng kẻ thù. Khi được lệnh tấn công, một trong những nhân vật của bạn chạy / nhảy lên một trong những kẻ thù và chém thanh kiếm khổng lồ của họ trước khi chạy / nhảy trở lại vị trí đứng của họ. Bạn muốn chắc chắn rằng kẻ thù bị hư hại tại thời điểm chính xác mà hoạt hình chém được phát - một số điểm giữa chạy lên và chạy trở lại.

  • Trong một trò chơi lén lút , nhân vật của bạn có thể lén lút và tương tác với máy tính và các nút trên thế giới. Có thể có một nút tắt nguồn cung cấp năng lượng cho đèn của tiền đồn mà bạn đang xâm nhập. Khi nhấn nút hành động, nhân vật của bạn sẽ vươn ra và nhấn nút và sau đó trở về trạng thái nhàn rỗi. Bạn muốn đèn tắt ở điểm chính xác trong hình động 'Push_button' khi nhấn nút.

Phải thừa nhận rằng trường hợp cụ thể của tôi giống như ví dụ thứ hai , trong đó tôi đã tạo ra một hình ảnh động trong đó nhân vật theo lượt của tôi lao về phía trước trong một cuộc tấn công và tôi muốn thiệt hại được áp dụng vào đúng thời điểm mà hoạt hình dường như đang tiếp xúc . Bởi vì trò chơi của tôi sử dụng hệ thống theo lượt (hãy tưởng tượng thứ gì đó như Final Fantasy hoặc Fire Badge), tôi muốn sát thương / hồi máu / ma thuật / v.v. được áp dụng vào đúng thời điểm trong mỗi hoạt hình nhân vật mặc dù tôi không thực sự sử dụng va chạm / hitboxes.

Tôi nên đề cập rằng tôi đang tạo trò chơi của mình trong một công cụ trò chơi phổ biến và ngay bây giờ tôi đang xử lý việc này bằng cách sử dụng các sự kiện hoạt hình của họ hoặc thông báo để đạt được kết quả gần với kết quả mong muốn - nhân vật của tôi thực hiện một lệnh nhất định và kích hoạt hoạt hình dành riêng cho lệnh (ví dụ: 'Attack_command') và các tài sản hoạt hình cho mỗi một lệnh của tôi phải bao gồm một sự kiện hoạt hình / thông báo 'gọi lại' vào các ký tự của tôi Hàm ExecuteCommand. Nói cách khác - nhân vật bảo hoạt hình tấn công phát, và sau đó hoạt hình tấn công phát ra một sự kiện / thông báo gọi lại vào nhân vật vào đúng thời điểm trong hoạt hình khi cần phải xử lý thiệt hại.

Thành thật mà nói, điều này hoạt động ngay bây giờ, nhưng nó chỉ cảm thấy sai - như tôi đang thiếu một phần của bức tranh lớn hơn ở đây! Một phần lý do khiến phương pháp này cảm thấy sai là vì nó kết hợp logic trò chơi với các tài sản hoạt hình; nếu tài sản hoạt hình của tôi quên bao gồm một sự kiện / gọi lại ExecuteCommand (), lệnh sẽ không thực thi đúng và cần thêm mã để kiểm tra xem hoạt ảnh lệnh đã kết thúc mà không thực hiện lệnh. Nó lộn xộn và điều đó có nghĩa là lối chơi của tôi có sự phụ thuộc kỳ lạ vào tài sản của nó. Tất nhiên tôi muốn thiệt hại xảy ra tại một điểm cụ thể trong hoạt hình tấn công của mình, nhưng tôi cảm thấy thực sự kỳ lạ khi gọi mã trò chơi bên trong tài sản hoạt hình ..

Vì vậy, tôi đang nhìn gì ở đây? Một số kỹ thuật chung tốt để xử lý các loại tình huống này trong đó bạn muốn một số hành động chơi trò chơi quan trọng nhất định xảy ra tại thời điểm cụ thể trong hoạt hình là gì?

Chỉnh sửa: Để làm rõ, đây không phải là một câu hỏi dành riêng cho động cơ và tôi cũng không tìm kiếm các thiết kế / kỹ thuật dành riêng cho động cơ. Tôi quan tâm đến các kỹ thuật đồng bộ hóa hoạt hình / trò chơi nói chung mà người ta có thể sử dụng trong các dự án trò chơi của bạn bất kể công nghệ được sử dụng.


1
Tôi bối rối. Bạn nói rằng bạn muốn chơi trò chơi phụ thuộc vào thời gian hoạt hình, nhưng sau đó nói rằng bạn không muốn trò chơi của mình phụ thuộc vào tài sản của bạn và hoạt hình là một loại tài sản. Làm thế nào để bạn mong đợi những mong muốn được tương thích?
Anko

Tôi muốn một số yếu tố chơi trò chơi được đồng bộ hóa với hình ảnh động. Tuy nhiên, đồng bộ hóa giữa hai thứ không phải lúc nào cũng bao hàm sự phụ thuộc, phải không? Tôi quan tâm đến một số kỹ thuật mà mọi người sử dụng để đồng bộ hóa hoạt hình của họ với lối chơi của họ. Tôi đã nói những gì tôi đã cố gắng và những gì tôi hiện đang làm để đạt được điều này - và vì vậy câu hỏi của tôi là, có một kỹ thuật khác / tốt hơn / thay thế mà người ta có thể sử dụng hoặc là (sự kiện hoạt hình / thông báo / cuộc gọi lại được đưa vào tài sản) cách chuẩn? Đây có phải là những gì bạn sử dụng trong các dự án của bạn?
MrKatSwordfish

Câu trả lời:


5

Để đồng bộ hóa, bạn cần quyết định ai (mã, hoạt hình hay không) của bạn là người có thẩm quyền thời gian mà "đập" mà mọi người khác "nhảy" theo.

Sắp xếp khác nhau phù hợp với các trò chơi khác nhau:

  • Ảnh động là cơ quan thời gian (thiết lập hiện tại của bạn)

    Mã trò chơi có thể kích hoạt hình ảnh động. Khi hình động đạt đến một số điểm nhất định, chúng sẽ đưa ra các sự kiện (ví dụ như tải lại xong) mà mã trò chơi có thể phản ứng (ví dụ: đặt lại đạn có sẵn).

    Nếu thời gian chính xác của hình ảnh động (độc lập với trạng thái trò chơi) là một phần quan trọng trong trò chơi của bạn hoặc bạn đặc biệt muốn các nhà hoạt hình của mình kiểm soát thời gian, hãy xem xét phương pháp này.

    Công cụ hoạt hình Blender (3D) và Spine (2D) cho phép người làm hoạt hình xác định các sự kiện mà mã trò chơi có thể đăng ký.

  • Mã là cơ quan thời gian

    Nghịch đảo ở trên: Các sự kiện xảy ra trong thế giới trò chơi (ví dụ: người chơi chọn tải lại vũ khí của họ) khiến hoạt ảnh được chạy và được truyền tham số (ví dụ: thời gian cho đến khi tải lại xong). Mỗi hoạt hình sử dụng các tham số được cung cấp để sửa đổi giao diện của nó (ví dụ: chạy hoạt ảnh ở tốc độ phù hợp sao cho "phần được tải lại" xảy ra khi được chỉ định).

    Ảnh động cũng có thể đang lắng nghe các sự kiện trong trò chơi (ví dụ: người chơi hủy tải lại hoặc cúi người chơi trong khi tải lại) và sửa đổi giao diện của chúng cho phù hợp.

    Nếu hoạt hình của bạn có thể đủ khả năng linh hoạt về thời gian, trò chơi của bạn phụ thuộc rất nhiều vào nội dung được tạo theo thủ tục hoặc bạn đặc biệt muốn các lập trình viên của mình kiểm soát thời gian, hãy xem xét phương pháp này.

    Hoạt hình nhân vật của Overgrowth phần lớn được cấu trúc theo cách này: David Rosen giải thích điều đó trong bài nói chuyện GDC 14 của mình (xem cụ thể cácphân đoạn Chuyển động Chuyển động ).

  • Thời gian tiềm ẩn (cơ quan bên ngoài)

    Trong các trò chơi nhịp điệu hoặc các tình huống khác trong đó thời gian được kiểm soát từ nguồn bên ngoài (trong các trò chơi nhịp điệu, nhịp điệu của bản nhạc), có thể có ý nghĩa để mô hình hóa mọi thứ như vậy. Mã trò chơi và hình ảnh động có thể đọc cả dấu thời gian và trạng thái trò chơi toàn cầu, sau đó hành xử phù hợp mà không cần giao tiếp.

    Nếu trạng thái trò chơi và hoạt hình của bạn chủ yếu phụ thuộc vào cơ quan thời gian bên ngoài, hãy xem xét phương pháp này.

Tất nhiên bạn có thể muốn sử dụng các phương pháp khác nhau cho các hệ thống khác nhau trong trò chơi của mình. (Ví dụ: các trò chơi nhịp điệu thường sử dụng nhịp của bài hát như một cơ quan bên ngoài, nhưng hoạt hình vẫn lắng nghe các sự kiện tương tác của người chơi để hủy hoặc thay đổi giao diện của các ghi chú được giữ.)


0

Tôi đã đọc ở đâu đó rằng hầu hết các vấn đề tính toán có thể được giải quyết bằng một lớp trừu tượng bổ sung và tôi không thấy trường hợp của bạn khác.

Đối với yêu cầu này, tôi thường thấy một lớp để kiểm soát Trạng thái của nhân vật. Bằng cách này, nhân vật sẽ có một Animation hiện tại và Trạng thái hiện tại. Mỗi người có trách nhiệm riêng.

Hoạt hình chỉ chịu trách nhiệm cho hình ảnh và nhà nước xử lý logic cụ thể của trò chơi cho hành động đó.

Trong trò chơi chiến đấu của tôi, trạng thái là một đối tượng kế thừa từ lớp BaseState và có phương thức Update (). Mỗi nhân vật có một tập hợp các trạng thái, nhưng mỗi lần chỉ có thể gán một trạng thái. Và phương thức Update () của trạng thái hiện tại được gọi một lần trên mỗi khung.

Nó nằm trong Cập nhật () của trạng thái nơi tôi thực hiện tất cả logic đó: đặt vận tốc của nhân vật ở một khung cụ thể, tăng / giảm sức khỏe, v.v.

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.