Lớp MyContactReport:
Lớp MyContactReport được kế thừa từ lớp NxUserContactReport đây là lớp của NovodeX cung cấp để người dùng có thể bắt và xử lý các sự kiện khi có va chạm giữa các actor trong hệ thống vật lý. Trong lớp MyContactReport ta sẽ cài đè hàm ảo onContactNotify để xử lý va chạm cho các đối tượng (trừ các nhân vật).
Lớp ControllerHitReport:
Lớp ControllerHitReport được kế thừa từ lớp NxUserControllerHitReport đây là một lớp cũng do NovodeX cung cấp đề xử lý các sự kiện va chạm khi nhân vật của chúng ta va chạm phải một vật cản trong môi trường. Chúng ta sẽ xử lý cho tường nhân vật riêng biệt như thiết lập lực tác động lên vật bị va chạm, xử lý AI đơn giản.
Lớp CPhysicsSystem:
Đây là lớp quản lý toàn bộ hệ thống vật lý. Trong Game sẽ có duy nhất một đối tượng thuộc lớp CPhysicsSystem cho phép ta khởi tạo hệ thống, hủy hệ thống, khởi tạo các thuộc tính chung cho các đối tượng vật lý, xử lý va chạm.
Các loại va chạm mà đối hệ thống vật lý xây dựng có thể xử lý: enum ECOLLISION_TYPE { COLLISION_NONE, COLLISION_BOX, COLLISION_SPHERE, COLLISION_CAPSULE, COLLISION_CONVEX, COLLISION_MESH, }; Ta sẽ xử lý va chạm cho các hộp, hình cầu, hình capsule (hình trụ có 2 đầu là 2 bán cầu), các mặt lồi được dùng cho các mesh tĩnh và động có số lượng tam giác cầu thành < 256, và cho các mesh tĩnh lớn. Hệ thống vật lý cũng đồng thời quản lý 3 nhóm va chạm:
enum EGAME_GROUP { GROUP_NON_COLLIDABLE, GROUP_COLLIDABLE_NON_PUSHABLE, GROUP_COLLIDABLE_PUSHABLE, };
Với GROUP_NON_COLLIDABLE là nhóm các actor hoàn toàn không thực hiện va chạm với các đối tượng khác hoặc không cần xử lý va chạm cho chúng. GROUP_COLLIDABLE_NON_PUSHABLE là nó có va chạm nhưng ta không thể di chuyển chúng được, và loại cuối cùng là GROUP_COLLIDABLE_PUSHABLE cho phép ta xử lý va chạm và tác động lực để di chuyển chúng.
Một chức năng quan trọng của lớp CPhysicsSystem là cho phép ta tạo ra các vật liệu tương ứng với các bề mặt của các vật có trong Game. Hệ thống còn cho phép tạo lập tốt các hình bao bọc dựa trên thuộc tính của các đối tượng trong Game.
Lớp CObjectPhysicController:
Như trong sơ đồ ta thấy mỗi một đối tượng thuộc lớp CMapObject sẽ chứa một đối tượng thuộc lớp CObjectPhysicController. Đối tượng này sẽ quản lý vật lý cho đối tượng trong Game. Sau khi đã khởi tạo đối tượng trong Game ta sẽ thông qua đối tượng này để tạo nên một đối tượng bao bọc tương ứng để xử lý vật lý. Sau khi hệ thống vật lý xử lý xong ta cũng dựa vào đối tượng này để thiết lập biến đổi cho đối tượng trong Game.
Như vậy, lớp CObjectPhysicController phải có có khả năng khởi tạo tất cả các đối tượng bao bọc tĩnh và động cho cả màn Game (trừ nhân vật) và truy cập vào các thuộc tính về vị trí, góc quay, trọng lượng cho các đối tượng vật lý. Ta có thể xem lớp này là một giao tiếp bao bọc để xử lý vật lý cho các đối tượng trong Game.
Lớp CCharacterPhysicController:
Lớp CCharacterPhysicController cũng có chức năng tương tự như lớp CObjectPhysicController nhưng được áp dụng cho một đối tượng đặc biệt cho phép người lập trình có thểđiều khiển trực tiếp đó là nhân vật. Mỗi đ i tượng thuộc l p
CActor cũng sẽ chứa duy nhất một đối tượng thuộc lớp CCharacterPhysicController để điều khiển nhân vật. Quản lý nhân vật là một tính năng nổi bậc của NovodeX được cung cấp từ phiên bản 2.2. Trước NovodeX chỉ có Navok là Engine vật lý cung cấp khả năng quản lý nhân vật. Nhờ việc xây dựng lớp CCharacterPhysicController ta sẽ sử dụng được chức năng này đơn giản hơn và hiệu quả hơn.
Với sự trợ giúp của hệ thống vật lý chúng ta sẽ tạo được nhưng nhân vật di chuyển và tương tác tốt với môi trường. Các tính năng quan trọng điều khiển nhân vật mà NovodeX cung cấp gồm:
Cung cấp chức năng cho phép kiểm tra và di chuyển nhân vật theo yêu cầu trong màn Game mà vẫn cho phép nhân vật tương tác với môi trường xung quanh.
Cho phép thực hiện các chức năng trí tuệ nhân tạo (AI) đơn giản cho nhân vật.
Di chuyển nhân vật trượt trên nền, dọc theo các bức tường hoặc vật cản, và đặc biệt cho phép nhân vật leo lên những bậc thang với cao của các bậc thang có thể thiết lập trước.
Thông báo và cho phép xử lý tương tác của đối tượng với môi trường như lực tác động lên đối tượng như thế nào khi có va chạm xảy ra thông qua hàm xử lý sự kiện khi có va chạm.
Kết hợp lớp tia chiếu để nhân vật có thể nhắm bắn đạn.
Để xử dụng chức năng quản lý nhân vật trước hết ta phải khởi tạo các khối điều khiển của NovodeX bao quanh các nhân vật ngay sau khi xác định vị trí và kích thước ban đầu của nhân vật. Hình sau minh hoạ các bao bọc nhân vật bằng khối hình hộp:
Hình 6-3 Điều khiển nhân vật với NovodeX
Như hình vẽ, ta sẽ dùng một hình hộp để bao quanh đối tượng. Khi cần thực hiện di chuyển nhân vật ta sẽ thực hiện di chuyển hình hộp bao quanh bằng hàm move do NovodeX cung cấp. Thực chất khi ta gọi hàm move để di chuyển hình hộp điều khiển thì NovodeX sẽ thực hiện kiểm tra xem nhân vật có thể di chuyển đến điểm mong muốn không bằng cách sử dụng một hình hộp thử và di chuyển hình hộp thử này đến vị trí cần đến. Sau quá trình kiểm tra như vậy, NovodeX sẽ xác định được vị trí cũng như vận tốc di chuyển tiếp theo của khối hộp và sẽ thực hiện di chuyển thật sự.
Sau khi điều khiển hình hộp điều khiển di chuyển ta sẽ lấy về vị trí và góc quay mới để thiết lập cho đối tượng.
6.5. Tóm tắt
Engine vật lý ngày càng là một thành phần quan trong trong xây dựng Game. Vật lý đã tạo ra bộ mặt mới cho Game, làm cho Game thêm sống động và chân thực. Với vai trò quan trọng của vật lý như vậy, chúng tôi đã tìm hiểu và sử dụng Engine vật lý NovodeX trong Game của mình. Nhờ có hệ thống vật lý mà quá trình xây dựng Game giảm bớt nhiều công sức và tăng tính hiệu quả bởi vì các việc kiểm tra va chạm đã được NovodeX xây dựng và tối ưu trên phần cứng.
Ngoài việc quản lý vật lý cho các đối tượng tĩnh và động trong Game, hệ thống vật lý xây dựng dựa trên NovodeX 2.2 cho phép điều khiển nhân vật rất thuận tiện và dựa vào đó xây dựng được các AI đơn giản cho nhân vật. Với việc kết hợp với tia chiếu do NovodeX cung cấp, chúng ta điều khiển tốt nhân vật trong mối tương tác với các đối tượng khác trong môi trường và có thể nhắm và bắn đạn chính xác.
Chương 7 Giới thiệu Game demo Dead Rising
Giới thiệu Game demo Dead Rising Nội dung cốt truyện
Các thành phần chính cần sử dụng Hệ thống các tập tin định nghĩa Tóm tắt