0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Khám Phá Giao Diện Người Dùng Trò Chơi Matrix: Hành Trình Xây Dựng Game P2

Đăng vào 1 tháng trước

• 3 phút đọc

Mở Đầu

Trong phần 2 của loạt bài viết về hành trình xây dựng trò chơi Matrix, chúng ta sẽ đi sâu vào cách thức hoạt động của giao diện người dùng (UI) trong trò chơi. Đội ngũ phát triển đã nỗ lực thiết kế một giao diện không chỉ trực quan mà còn giúp người chơi có trải nghiệm chơi tốt nhất. Hãy cùng khám phá các bước thiết kế và cách các thành phần của giao diện tương tác với nhau!

Giao Diện Trò Chơi

Để tạo ra giao diện cho trò chơi Matrix, chúng tôi đã sử dụng thư viện KonvaJS, một công cụ mạnh mẽ hỗ trợ việc thao tác canvas trong môi trường React. Bàn chơi của Matrix có kích thước 9x9 nhưng chỉ có 27 điểm có thể đặt block, cụ thể là 3 hàng và 9 cột. Nhiệm vụ của người chơi là kéo và thả các khối block vào đúng vị trí quy định.

Với số lượng điểm đặt hạn chế, hệ thống sẽ ghi nhận tọa độ của block khi người chơi thả chuột. Sau đó, chúng tôi sử dụng công thức tính toán để xác định ô gần nhất và tự động đặt block vào đúng vị trí đó.

Tọa Độ Của Các Ô Trong Bàn Chơi

Thông Tin Bàn Chơi

Chúng tôi đã dựa vào tọa độ x và y trong bàn chơi được tạo ra từ KonvaJS. Giả sử vị trí bắt đầu của ô đầu tiên là điểm (a,a), cho đến ô cuối cùng là 8a với tọa độ (ax,ay). Dựa vào logic này, chúng ta có thể xây dựng tọa độ của từng ô trong bàn chơi như sau:

  • Các ô trong bàn được sắp xếp theo dạng bảng 9x9, từ tọa độ bắt đầu đến tọa độ kết thúc.

Logic Kéo Thả

Để người dùng có thể dễ dàng thao tác mà không cần phải kéo chính xác vào ô, chúng tôi đã áp dụng một số công thức giúp xác định vị trí gần nhất mà block sẽ được thả.

1. Công Thức Tính Toán:

Copy
const diffX = target.x() + BASE_SIZE * 0.25 - BASE_SIZE * 0.5;
const diffY = target.y() + BASE_SIZE * 0.5 - BASE_SIZE * 1.5;

const x = Math.round(diffX / BASE_SIZE);
const y = Math.round(diffY / 3 / BASE_SIZE);
  • target.x()target.y() là tọa độ cuối cùng của block sau khi được kéo thả.
  • BASE_SIZE là kích thước của mỗi ô trong bàn, tương đương với khối block 1x1.
  • Các giá trị diffXdiffY được tính toán để xác định độ chênh lệch giữa vị trí của block và ô gần nhất, nhờ đó tạo điều kiện đặt block một cách trung gian một cách dễ dàng.

2. Giới Hạn Tọa Độ

Khi block được kéo thả vào bàn chơi, cần đảm bảo tọa độ của nó nằm trong giới hạn nhất định:

  • Tọa độ x phải nằm trong khoảng: a <= target.x() <= 8ax.
  • Tương tự, tọa độ y phải nằm trong khoảng: a <= target.y() < 8ay.

3. Tính Toán Sự Chênh Lệch

Công thức tính toán diffXdiffY đảm bảo rằng độ chênh lệch nằm trong khoảng hợp lý, giúp xác định vị trí chính xác mà block sẽ được đặt vào ô trong bảng chơi. Nếu block được kéo ra ngoài bàn chơi, nó sẽ tự động trở về vị trí ban đầu.

Tổng Kết

Trong bài viết này, chúng ta đã cùng nhau tìm hiểu quá trình thiết kế giao diện cho trò chơi Matrix. Từ việc sử dụng KonvaJS để xây dựng bàn chơi đến việc triển khai logic kéo thả một cách chính xác, chúng tôi đã khơi gợi đằng sau những tính toán phức tạp mà hệ thống phải thực hiện. Điều này không chỉ giúp người chơi có trải nghiệm thú vị và thuận lợi hơn, mà còn nâng cao tính chính xác trong quá trình chơi game.

Hy vọng rằng bài viết này đã giúp bạn có cái nhìn sâu sắc hơn về cách thức hoạt động của giao diện người dùng trong trò chơi Matrix, cũng như những yếu tố tương tác như kéo thả block được triển khai một cách hiệu quả. Nếu bạn có ý định phát triển các trò chơi tương tự, hãy áp dụng những phương pháp này để cải thiện trải nghiệm người dùng trong game của bạn.

© Tác giả: Kỹ Sư Phần Mềm Giang Nguyễn
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào