Tài trợ bài viết này và giới thiệu dịch vụ, sản phẩm, thương hiệu, nhu cầu tuyển dụng của doanh nghiệp đến với cộng đồng.
La Kiến Vinh Sprite và 2D Animation giúp tạo ra các hiệu ứng đẹp trong lập trình games. Bài viết này được tạo ra dựa trên kiến thức và kinh nghiệm thực tế sẽ giúp bạn dễ dàng hiểu rõ hơn về 2 khái niệm này và ứng dụng linh hoạt hơn giúp cho games sinh động.
Nội dung bài viết

Giới thiệu

2D Animation trong game 2D dùng để tạo các chuyển động trong game cho các nhân vật cho game sinh động hơn. Việc để hiểu khái niệm 2D Animation không khó, ý tưởng đơn giản vẫn là vẽ tuần tự từng ảnh một theo thời gian. Việc lưu trữ các ảnh rời rạc sẽ gây khó khăn trong việc quản lý các Animation, thông qua đó, chúng ta có một "công cụ" khá hữu hiệu đó là Sprite. Animation và Sprite sẽ được đề cập chi tiết trong các phần của bài viết này.

Đối tượng hướng đến

Bài viết nói về phương pháp - mô hình - đặc tả - khái niệm để tạo được một 2D Animation và Sprite, bài viết không bàn chuyên sâu về cách hiện thực hóa cụ thể trong ngôn ngữ lập trình, 2 đối tượng mà nó nhắm đến là:

  • Các bạn đang ở mức độ tìm hiểu và chưa có khả năng hiện thực hóa, và xem bài viết này như một nguồn cung cấp thêm kiến thức.
  • Các bạn đã có kỹ năng về lập trình tốt, bài viết đề cập về mô hình và giải pháp đủ để các bạn hiện thực hóa dựa vào ngôn ngữ hay yêu cầu cụ thể cho công việc của mình.

Frame là gì?

Trong ngữ cảnh của bài viết này, frame là một khung hình. Giả sử ta muốn vẽ một đối tượng lên màn hình, ta cần 1 FRAME hình có chứa đối tượng đó.

Hình bên dưới giả sử ta vẽ thêm 1 Frame Huân Chương hình đầu ngựa (đại diện cho PRIDE) vào game, ta sẽ có được kết quả mới.

frame_sins

Animation trong game 2D là gì?

Animation trong game 2D đề cập đến việc vẽ lần lược các FRAME (mỗi khung hình cho 1 Animation) trong một đơn vị thời gian. Mỗi Animation hoặc nhiều Animation có thể đại diện cho một hành động, ứng xử cụ thể của nhân vật.

Bao nhiêu Frame cho 1 animation là đủ, là đẹp?

Theo kinh nghiệm trong các dự án của tôi, tùy thuộc vào nhiều yếu tố để xác định bao nhiêu Frame như kích thước của màn hình, kích thước đối tượng, bộ nhớ (RAM) của thiết bị (vì để lưu trữ nhiều dữ liệu hơn thì cần nhiều bộ nhớ hơn). Bên dưới là hiệu ứng hủy Sins Envy với 16 Frames/second.

*Theo lý thuyết của phim ảnh thì chỉ cần đạt ngưỡng 24 Frames/second là khá ổn (lưu ý là trong game sẽ khác với phim ảnh).

animation_envy

Hiệu ứng hủy Sins Envy với 16 Frames hình

Sprite là gì?

Giả sử với mỗi Frame ta lưu trong 1 tấm ảnh độc lập, với hiệu ứng hủy Sins Envy như trên, ta cần 16 ảnh độc lập và theo thời gian ta sẽ vẽ lần lượt từng Frame hình và tạo ra Animation như mong muốn. Việc lưu trữ chung một thư mục 16 ảnh độc lập đó, có thể tạm hiểu là một cách tổ chức đơn giản nhất cho dữ liệu mà ta có thể nghĩ ra.

Ngoài cách trên, chúng ta sẽ thường thấy 1 phương pháp tổ chức khác là toàn bộ các Frame hình sẽ chung trong 1 tấm ảnh duy nhất, cách tổ chức này ta đặt tên là Sprite.

sprite_envy_frame

Sprite của Sins Envy

Vậy, tại thời điểm t, ta muốn vẽ Frame thứ 6, ta sẽ truyền tọa độ (X, Y) lẫn độ rộng WIDTH và cao HEIGHT của Frame muốn vẽ (đa phần các thư viện vẽ đã hỗ trợ bạn phương thức vẽ này). Nếu như không hỗ trợ, bạn vẫn có thể làm được điều này thông qua nhiều cách khác nhau như trong quá trình nạp ảnh, ta chủ động cắt nhỏ các hình và nạp vào bộ nhớ (đây là một đề nghị, bạn có thể làm bất cứ điều gì khác để đạt được mục đích gom nhiều Frame vào 1 tấm hình duy nhất trong lưu trữ và tổ chức dữ liệu).

sprite_envy_frame_3

Hình trên chỉ mô tả 1 Animation của Sins Envy là bị hủy, ngoài ra trong 1 Sprite ta có thể chứa nhiều loại Animation khác nhau, của nhiều đối tượng khác nhau. Vấn đề cốt lõi của Sprite là vẽ Frame nào đó với Frame đó nằm ở vị trí nào trong Sprite và có độ rộng, độ cao bao nhiêu.

sprite_sins_all_animation

Sprite chứa tất cả Animation hủy Sins

THẢO LUẬN
ĐÓNG