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.
STDIO Trong quá trình phát triển game, việc viết lại các thư viện mô phỏng vật lý sao cho giống đời thực thực sự là một việc không dễ dàng, vì kiến thức về vật lý cũng như thời gian không có nhiều. Một Physics Engine mạnh mẽ như Box2D đã giải quyết được những vấn đề trên. Việc tích hợp Box2D vào project C++ của chúng ta cũng gặp phải một số khó khăn. Bài viết này tác giả sẽ hướng dẫn các bạn cách tích hợp Box2D vào project để sử dụng Engine Physics này mô phỏng vật lý cho game của chúng ta.
Nội dung bài viết

Giới thiệu

Trong quá trình phát triển game, việc viết lại các thư viện mô phỏng vật lý sao cho giống đời thực thực sự là một việc không dễ dàng, vì kiến thức về vật lý cũng như thời gian không có nhiều. Một Physics Engine mạnh mẽ như Box2D đã giải quyết được những vấn đề trên. Việc tích hợp Box2D vào project C++ của chúng ta cũng gặp phải một số khó khăn. Bài viết này tác giả sẽ hướng dẫn các bạn cách tích hợp Box2D vào project để sử dụng Engine Physics này mô phỏng vật lý cho game của chúng ta.

Tiền đề bài viết

Sau 2 tháng làm việc để xây dựng Engine Game sử dụng thư viện SDL2 thì Engine của tôi cũng hoàn thành với những thành phần cơ bản của một Engine Game. Bước vào logic game thì tôi thấy việc mô phỏng vật lý là quá khó, trong game có nhiều object thì việc kiểm tra va chạm tốn rất nhiều chi phí nếu thuật toán xử lý không tốt. Sau đó tôi đã tìm ra thư viện Box2D giúp tôi có thể giải quyết được những vấn đề trên.

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

Những lập trình viên đang tìm kiếm một thư viện vật lý để mô phỏng cho game của mình và mong muốn tích hợp thư viện này vào project game của mình.

Yêu cầu các bạn phải hiểu biết về Thư viện liên kết, các bạn có thể xem qua bài viết Static Link Library Và Dynamic Link Library.

Bài viết được hiện thực trên Visual Studio 2013 chạy trên hệ điều hành Windows 8.1 Professionnal.

Tổng quan về Box2D

Box2D là một Physics Engine cực kì mạnh mẽ được sử dụng để mô phỏng vật lý trong game. Box2D là một thư viện mã nguồn mở (open source and free), được viết bằng C++, nhưng hiện tại đã ported qua nhiều ngôn ngữ khác nhau như java, javascript, C#, python...

Trang chủ của Box2D: http://box2d.org/

Để download thư viện Box2D tại ĐÂY.

Tích hợp Box2D vào project

Tạo project console C++ có tên là MyGame bằng cách mở Visual Studio 2013 vào File > New > Project, sau đó chọn Empty Project, đặt tên là MyGame và nhấn OK để tạo Project.

Trong thư mục chứa file .sln của project MyGame các bạn tạo một thư mục Lib để chứa thư viện Box2D.

Tiến hành download Box2D, giải nén file tải về ta sẽ có được folder Box2D-master. Ở đây chúng ta chỉ quan tâm đến thư mục Box2D trong thư mục này. Copy thư mục Box2D vào vào thư mục Lib vừa mới tạo.

Chuột phải vào Solution chọn Add > Exsiting Project...

ss_1

Chọn đến file  Lib\Box2D\Build\vs2013\Box2D.vcxproj để thêm project Box2D vào Solution.

Kết quả nếu add thành công.

ss_2

Chuột phải vào project Box2D và chọn Set as StartUp Project và tiến hành build project này để tạo ra file file thư viện liên kết tĩnh (file .lib).

ss_3

Như vậy là chúng ta đã build được thư viện liên kết bây giờ chỉ vệc liên kết thư viện này với project MyGame.

Tiếp theo ta tiến hành thêm đường dẫn tới các file header và file thư viện của Box2D cho project MyGame. Chúng ta làm như sau:

Vào Properties của project MyGame để mở hộp thoại MyGame Property Pages. Vào mục C/C++, ở dòng Additional Include Directories ta thêm vào dòng như sau và nhấn OK.

ss_4

Vào Linker/General chọn dòng Additional Libraries Directories và thêm vào đường dẫn tới file .lib

ss_5

Trong mục Linker/Input chọn dòng Additional Dependencies và thêm vào dòng "Box2D.lib"

ss_6

Sử dụng Box2D

Vậy là chúng ta đã tích hợp xong thư viện Box2D vào project C++. Việc sử dụng thư viện này bạn chỉ cần inlcude như sau:

#include <Box2D\Box2D.h>

Một ví dụ khởi tạo world trong Box2D 

int main()
{
	b2Vec2 gravity(0.0f, -9.8f);
	b2World* world = new b2World(gravity);

	return 0;
}

Chi tiết về sử dụng thư viện này như thế nào thì các bạn có thể xem qua các bài viết Box2D trong chương trình tự học GAME & COCOS2D-X 3 của tác giả Trương Đạt. Chân thành cảm ơn tác giả Trương Đạt với chuổi bài viết rất bổ ích.

Lời kết

Qua bài viết trên tôi hy vọng giúp ích được các bạn tìm ra giải pháp trong việc mô phỏng vật lý trong project game của chính mình cũng như tích hợp thư viện Box2D vào project như thế nào. Nếu có bất cứ thắc mắc nào các bạn có liên hệ với tác giả Nguyễn Nghĩa để được giải đáp thắc mắc sớm nhất.

THẢO LUẬN
ĐÓNG