Tạo một World và một Box
Friday, October 19, 2012 5:22:26 PM
Chúng ta sẽ cùng nhau đi tìm hiểu cách tạo world của Box2dweb.
Tạo Box2d world
Một world sẽ có 2 tham số là gravity và sleep. Gravity là hiển nhiên có thể hiểu (trọng lượng), 'sleep' ở đây có nghĩa là một đối tượng trong world này sẽ rơi vào trạng thái ngủ nếu nó không di chuyển theo quy tắc vật lý và không có đối tượng nào khác di chuyển để tác động vào nó trong khoảng 0.5 giây (chúng ta có thể thay đổi thời gian nếu cần). Chúng ta thường cho phép đối tượng 'sleep' bởi vì khi một đối tượng rơi vào trạng thái 'sleep' nó sẽ không đóng vai trò gì trong Box2d, như thế năng lượng của thiết bị có thể được tiết kiệm. Và nó sẽ làm việc nhanh và dễ dàng hơn.
Với một câu lệnh javascript này chúng ta chỉ tạo ra một Box2d world với gravity là 10m/s/s. Và 'sleep' được cho phép, bằng cách thiết lập tới 'true'. Chúng ta chú ý rằng gravity được thiết lập như là một vecto (0,10) thay vì (0,-10), bởi vì trong hệ trục tọa độ của Box2d, trục Y sẽ có hướng xuống dưới. Box2d sử dụng meters, kilograms, và giây cho các đơn vị và radian cho góc.
Tạo một Box đơn giản
Chúng ta hãy cùng để ý tới hình ảnh mô tả ở trên. Chúng ta sẽ nhận thấy rằng bodyDef và fixtureDef dùng để định nghĩa các đối tượng. Trong bodyDef, bạn có thể định nghĩa kiểu của đối tượng - hoặc dynamic hoặc static. Vị trí của body liên hệ với world cũng được định nghĩa trong bodyDef. Chúng ta sử dụng fixtureDef để định nghĩa các thuộc tính của một đối tượng bao gồm density, friction và restitution, moreover, shape cũng được tạo bởi fixtureDef và được sử dụng để định nghĩa shape và size của đối tượng. Bây giờ chúng ta sẽ có thể hiểu được làm thế nào đoạn code dưới đây định nghĩa 1 box 1x1 tại vị trí (2,2).
Đây chỉ là bước cuối cùng để thêm box vào trong Box2d world.
Chúng ta cần tạo ra một đối tượng với tên xác định để chúng ta có thể tìm và thao tác nó thuận tiện hơn trong tương lai. để làm điều này, chúng ta chỉ cần thay đổi dòng code trên như sau:
Tạo Box2d world
Một world sẽ có 2 tham số là gravity và sleep. Gravity là hiển nhiên có thể hiểu (trọng lượng), 'sleep' ở đây có nghĩa là một đối tượng trong world này sẽ rơi vào trạng thái ngủ nếu nó không di chuyển theo quy tắc vật lý và không có đối tượng nào khác di chuyển để tác động vào nó trong khoảng 0.5 giây (chúng ta có thể thay đổi thời gian nếu cần). Chúng ta thường cho phép đối tượng 'sleep' bởi vì khi một đối tượng rơi vào trạng thái 'sleep' nó sẽ không đóng vai trò gì trong Box2d, như thế năng lượng của thiết bị có thể được tiết kiệm. Và nó sẽ làm việc nhanh và dễ dàng hơn.
var world = new b2World(new b2Vec2(0,10), true);
Với một câu lệnh javascript này chúng ta chỉ tạo ra một Box2d world với gravity là 10m/s/s. Và 'sleep' được cho phép, bằng cách thiết lập tới 'true'. Chúng ta chú ý rằng gravity được thiết lập như là một vecto (0,10) thay vì (0,-10), bởi vì trong hệ trục tọa độ của Box2d, trục Y sẽ có hướng xuống dưới. Box2d sử dụng meters, kilograms, và giây cho các đơn vị và radian cho góc.
Tạo một Box đơn giản
Chúng ta hãy cùng để ý tới hình ảnh mô tả ở trên. Chúng ta sẽ nhận thấy rằng bodyDef và fixtureDef dùng để định nghĩa các đối tượng. Trong bodyDef, bạn có thể định nghĩa kiểu của đối tượng - hoặc dynamic hoặc static. Vị trí của body liên hệ với world cũng được định nghĩa trong bodyDef. Chúng ta sử dụng fixtureDef để định nghĩa các thuộc tính của một đối tượng bao gồm density, friction và restitution, moreover, shape cũng được tạo bởi fixtureDef và được sử dụng để định nghĩa shape và size của đối tượng. Bây giờ chúng ta sẽ có thể hiểu được làm thế nào đoạn code dưới đây định nghĩa 1 box 1x1 tại vị trí (2,2).
var bodyDef = new b2BodyDef; bodyDef.type = b2Body.b2_dynamicBody; //define object type bodyDef.position.Set(2, 2); //define position var fixDef = new b2FixtureDef; fixDef.density = 10.0; //define density fixDef.friction = 0.5; //define friction fixDef.restitution =0.2; //define restitution fixDef.shape = new b2PolygonShape; //define shape fixDef.shape.SetAsBox(1, 1); //define size
Đây chỉ là bước cuối cùng để thêm box vào trong Box2d world.
world.CreateBody(bodyDef).CreateFixture(fixDef);
Chúng ta cần tạo ra một đối tượng với tên xác định để chúng ta có thể tìm và thao tác nó thuận tiện hơn trong tương lai. để làm điều này, chúng ta chỉ cần thay đổi dòng code trên như sau:
var happyBox = world.CreateBody(bodyDef); happyBox.CreateFixture(fixDef);






