Làm thế nào để hoạt hình tương tác nhân vật / đối tượng hoạt động trong các trò chơi isometric?


10

Tôi đang lên kế hoạch cho một trò chơi mô phỏng kinh doanh isometric nơi người chơi nhìn thấy một văn phòng với các đồ nội thất thông thường như bàn, bảng trắng, v.v.

Các nhân vật (Nhân viên / NPC) trong trò chơi nên tương tác với các đối tượng này bằng cách thực hiện một số tác vụ được xác định trước như gõ trên bàn phím tại bàn hoặc viết trên bảng trắng, v.v.

Điều tôi quan tâm, cụ thể, là kịch bản sau đây:

Nhân vật di chuyển qua văn phòng (1) đến bàn của anh ta (2) và ngồi xuống và bắt đầu gõ (3).

Từ những gì tôi hiểu, tôi sẽ có một bảng sprite cho chuyển động của nhân vật (1) và một sprite tĩnh cho bàn (2) nhưng tôi không hiểu lắm về cách xử lý bước thứ ba?

Có một sprite kết hợp có chứa cả bàn và nhân vật? Tôi giả sử là không, nếu không tôi sẽ cần phải có một bảng sprite cho mỗi kết hợp bàn và nhân vật.

Làm thế nào là điều này thường được xử lý?

BIÊN TẬP:

Dưới đây là một ví dụ cụ thể hoạt hình từ Bệnh viện chủ đề trò chơi. Bạn có thể xem video ở đây .

Theo như tôi có thể thấy hoạt hình được chia thành nhiều bước.

Bước 1 - Nhân vật di chuyển giữa bàn và ghế.

nhập mô tả hình ảnh ở đây

Điều này cho thấy rằng ghế và bàn thực tế là những họa tiết riêng biệt.

Bước 2 - Nhân vật ngồi xuống hoạt hình

nhập mô tả hình ảnh ở đây

Chú ý làm thế nào trong khung cuối cùng, chiếc ghế gần với bàn hơn.

Bước 3 - Hoạt hình bàn

nhập mô tả hình ảnh ở đây

Bước 4 - Đứng lên hoạt hình

Cũng giống như ngồi xuống nhưng chơi ngược lại.

Bước 5 - Di chuyển đi

Sử dụng hoạt hình di chuyển bình thường để di chuyển đi.

Các câu hỏi tôi có là làm thế nào những hình ảnh động này được phân tách tốt nhất và làm thế nào một nghệ sĩ đồ họa thường cung cấp những hình ảnh động này?

Là nhân vật ngồi và gõ trên bàn thực sự là ba họa tiết khác nhau (bàn, nhân vật và ghế)? Có ai biết bất kỳ ví dụ spites của hình ảnh động tương tự?

EDIT 2:

Tôi đoán mối quan tâm lớn nhất của tôi là tôi có những kỳ vọng đúng đắn về việc các sprite sẽ thực sự trông như thế nào. Tôi không thể tự vẽ chúng vì vậy tôi sẽ phải trả tiền cho ai đó để làm điều đó và tôi cho rằng có một cách thực hành tốt nhất để làm những loại hoạt hình này?

Câu trả lời:


8

Câu trả lời ngắn? Không kết hợp các sprite.
Đó là, nếu bạn kết hợp, bạn sẽ phải có hình ảnh động cho mỗi kết hợp. Có vẻ lạ nếu bạn chỉ muốn một chiếc ghế. Nhưng hãy giả vờ rằng văn phòng của bạn có thể được mở rộng trong trò chơi giữa, nơi mà những chiếc ghế bây giờ có một sprite đẹp hơn. Bạn sẽ chỉ cần thêm một sprite ghế, hoặc bạn sẽ kết hợp lại và thêm tất cả các hình ảnh động của mỗi nhà tuyển dụng một lần nữa?

Hãy làm cho một số calcs.

Giả sử bạn có 6 họa tiết trên một chủ nhân đang ngồi gõ hoạt hình, bạn có 5 ghế khác nhau và 10 loại chủ nhân khác nhau.

Nếu bạn chỉ vẽ chủ nhân trên ghế, điều này sẽ mất 10 * 6 + 5 sprite, 65 spites.
Nếu bạn kết hợp và thực hiện mọi kết hợp, việc này sẽ mất 10 * 6 * 5 sprite, nghĩa là 300 sprite. Sẽ là một nỗi đau cho bạn để làm cho một spritesheet lớn như vậy chỉ cho một hình ảnh động đơn giản!

BIÊN TẬP:

Chà, nếu bạn không biết làm thế nào, sẽ tốt hơn nếu xác định chiếc ghế của bạn làm nền, và nhân viên là những người hoạt động tích cực. Dễ dàng hơn cho bạn.

Background.draw();
Foreach(employer i in staff)
    I.draw();

Điều đó sẽ giữ cho nhân viên của bạn tách biệt khỏi chais của bạn (nền) Ngoài ra, hãy cập nhật các khung của hoạt hình nhân viên một cách độc lập.

EDIT2:

Tôi thấy chỉnh sửa của bạn và mẫu của bạn. Tôi sẽ giữ cách tiếp cận tương tự. Tất cả các sprite khác nhau. Chiếc ghế sẽ đi trước mặt nhân vật nào!

Để di chuyển ghế gần hơn, hãy cập nhật vị trí của nó lên một số pixel lên và sang trái hoặc thực hiện điều này trên chính sprite.

Bạn có hiểu về căn chỉnh Z không? nên chơi nhiều thứ ...

Bạn có thể thấy rằng một số phần của chiếc ghế ở phía sau nhân vật, những phần khác xuất hiện ở phía trước. Vì vậy, làm thế nào là điều này có thể nếu nó chỉ là một sprite? Z thẳng hàng!

Hai cách để đạt được hiệu quả. Giữ một mặt nạ (Không dễ dàng) hoặc chia sprite của bạn thành hai.

Tôi sẽ chỉ đề cập đến phương pháp thứ hai, vì bây giờ tôi không có nhiều thời gian. Bạn nên cắt sprite ghế của bạn, trong các phần sẽ ở phía trước, và những gì sẽ ở phía sau. Sau đó đặt chúng vào cùng một vị trí. dễ dàng! Những gì chơi là Z Align ở đây, Các phần phía sau nên được vẽ phía sau, nhân vật ở giữa và các phần ghế trước ở phía trước.

Tôi không biết lib / api / sdk / toolset nào bạn đang sử dụng. Nhưng phần lớn làm theo cách này: sử dụng yếu tố az Align để xác định cái gì ở phía sau hoặc cái gì ở phía trước hoặc cái gì được vẽ trước đi phía sau, cái gì được vẽ ở phía trước. Vì vậy, bạn nên ghi nhớ điều này.


Vâng cảm ơn. Tôi cũng nghĩ vậy nhưng tôi không hiểu làm thế nào những hình ảnh động sẽ đạt được sau đó. Bạn có biết một ví dụ tôi có thể nhìn vào? đó sẽ là tốt nhất
Patrick Klug

Bạn có nghĩa là mã hoặc một trò chơi? Nếu bạn muốn chơi game, hãy thử xem Game Dev Story của Kairosoft cho Android và iOS. Mã ví dụ tôi không biết ...
Gustavo Maciel

Trả lời sửa đổi. Xem nếu nó phù hợp với nhu cầu của bạn (:
Gustavo Maciel

Tôi đã cập nhật câu hỏi của tôi với một ví dụ cụ thể. Tôi thực sự quan tâm đến việc các họa tiết sẽ trông như thế nào hoặc những gì các nghệ sĩ đồ họa được sử dụng để cung cấp. Hoạt hình của GameDev Story hơi đơn giản cho những gì tôi nghĩ.
Patrick Klug

Đọc Chỉnh sửa 2, tôi đã cải thiện câu trả lời, hy vọng nó đáp ứng nhu cầu của bạn.
Gustavo Maciel

2

Một ý tưởng khác sẽ là bao gồm hình ảnh Bộ đệm sâu / Z với các họa tiết của bạn tương tự như cách API 3D (OpenGL) đảm bảo đa giác không trùng nhau. Đối với một trò chơi sprite cơ bản, nó có thể chỉ là một loạt các bit 0/1 (bitmap đen trắng) (mặc dù bạn có thể sử dụng nhiều cấp độ sâu hơn nếu bạn muốn).

Nếu bạn có một sprite 'bàn ghế' kết hợp và muốn chiếc ghế xuất hiện trước bất kỳ họa tiết nào khác (tức là người) trên hình vuông đó, bạn sẽ tạo phiên bản Z-Buffer của char 'black' trong khi bàn sẽ có màu 'trắng' .

Khi bạn kết xuất sprite động (một người) trên ô đó, nó sẽ kiểm tra xem màu nào trong bộ đệm độ sâu. Đối với các pixel là 0 (màu đen), bạn bỏ qua việc vẽ người đó tạo các pixel và chỉ để các ghế ở đó.

Thay vì kiểm tra từng pixel 1 tại một thời điểm, cách đơn giản hơn để thực hiện kiểm tra sẽ là nhân các pixel sprite với giá trị bộ đệm độ sâu vì độ sâu gần hơn sẽ là 0 và hủy bỏ. Sau đó, tất nhiên bạn phải colorkey (trừ khi bạn có một kênh màu alpha).

Điều này tất nhiên bổ sung thêm chi phí (mặc dù bạn có thể bỏ qua nó cho bất kỳ thứ gì không cần nhiều cấp độ sâu như bàn ghế). Bạn cũng cần phải đồng bộ hóa hoạt hình của mình (tức là người đó sẽ phải khớp với hoạt hình ghế bàn). Nó không cung cấp cho bạn sự linh hoạt giống như chỉ có một bó các sprite riêng biệt.


Lớp sâu với mặt nạ tôi đã đề cập trong phần chỉnh sửa của mình (:
Gustavo Maciel
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.