My Opera is closing 3rd of March

Hoang Ha's Blog

Hoang Ha lives in HCMC, Viet Nam

Render và Time

, , ,

Là một physics engine, Box2d chịu trách nhiệm cho hầu hết các yếu tố vật lý - mô tả những thứ mà nó xảy ra trong thế giới vật lý.

Điều này có nghĩa là bạn không thể nhìn thấy bất kỳ thứ gì trên màn hình trừ khi bạn thể hiện nó ra. Thường thì khi chúng ta sử dụng javascript với trình duyệt như là một nền tảng, những chức năng mới của HTML5 sẽ được đưa ra trên stage, nhưng được sắp xếp một cách đơn giản và có tổ chức. Chúng ta hãy tập trung vào các đối tượng vật lý, và chỉ sử dụng canvas trong HTML5. Đoạn code bên dưới sẽ mô tả cách một đối tượng DebugDraw sẽ làm việc:

var debugDraw = new b2DebugDraw(); 
debugDraw.SetSprite ( document.getElementById ("canvas").getContext ("2d")); 
debugDraw.SetDrawScale(30); //define scale - tỷ lệ
debugDraw.SetFillAlpha(0.3); //define transparency  - sự trong suốt
debugDraw.SetLineThickness(1.0); 
debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit); 
world.SetDebugDraw(debugDraw);


Scale được sử dụng để chuyển đổi những thứ từ meter tới pixel và đặc trung thiết lập tới 30 (1m=30px). Sau đó chúng ta cần cấu hình thời gian và đặt nó vào trong phương thức update():
function update() 
{ 
world.Step(1 / 60, 10, 10);
world.DrawDebugData(); 
world.ClearForces();
};


Dòng code world.Step(1 / 60, 10, 10); là khá quan trọng. Các tham số trong đó như sau: 1/60 có nghĩa là 60 FPS; tham số tiếp theo là 10 - tốc độ lặp và tham số cuối cùng là vị trí lặp. Các tham số này sẽ điều khiển sự chính xác vật lý của các đối tượng trong game. Nếu bạn thiết lập nó quá cao, chúng ta có thể thấy đầy đủ hơn các hiệu ứng vật lý, hiệu suất và tốc độ game cũng sẽ bị ảnh hưởng.

Ví dụ hoàn chỉnh dưới đây sẽ cho chúng ta thấy cách mà các đối tượng của Box2d kết hợp với nhau:

Tạo file Index.html:
<html> 
<head> 
<title>Arch!tect’s Box2dweb study notes 01</title> 
</head> 
<body> 
<canvas id="canvas" width=100" height="350"></canvas> 
</body> 
<script type="text/javascript" src="Box2dWeb-2.1.a.3.min.js"></script> 
<script type="text/javascript">  
var b2Vec2 = Box2D.Common.Math.b2Vec2 , 
b2BodyDef = Box2D.Dynamics.b2BodyDef , 
b2Body = Box2D.Dynamics.b2Body , 
b2FixtureDef = Box2D.Dynamics.b2FixtureDef , 
b2World = Box2D.Dynamics.b2World , 
b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape , 
b2DebugDraw = Box2D.Dynamics.b2DebugDraw;  

//create world 
var world = new b2World(new b2Vec2(0, 10), true);  

//create Mr happyBox 
var bodyDef = new b2BodyDef; 
bodyDef.type = b2Body.b2_dynamicBody; 
bodyDef.position.Set(2, 2); 

var fixDef = new b2FixtureDef; 
fixDef.density = 10.0; 
fixDef.friction = 0.5; 
fixDef.restitution =1;  
fixDef.shape = new b2PolygonShape; 
fixDef.shape.SetAsBox(1, 1);

var happyBox = world.CreateBody(bodyDef)
happyBox.CreateFixture(fixDef);
  
//create a holder 
var holderDef = new b2BodyDef; 
holderDef.type = b2Body.b2_staticBody;
holderDef.position.Set(2, 10);  
var holder = world.CreateBody(holderDef) 
holder.CreateFixture(fixDef);  

//setup debug draw 
var debugDraw = new b2DebugDraw();
debugDraw.SetSprite( document.getElementById ("canvas").getContext("2d") ); debugDraw.SetDrawScale(30.0); 
debugDraw.SetFillAlpha(0.5); 
debugDraw.SetLineThickness(1.0);
debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);
world.SetDebugDraw(debugDraw); 
window.setInterval(update, 1000 / 60); 

//update 
function update()
{ 
 world.Step(1 / 60, 10, 10);
 world.DrawDebugData(); 
 world.ClearForces(); 
};
</script>  
</html>


Chúng ta hãy chú ý tới đoạn code từ dòng var holderDef = new b2BodyDef; tới var debugDraw = new b2DebugDraw();Tôi chỉ định nghĩa bodyDef của nó nhưng sử dụng cùng fixDef như là happyBox.

Từ dòng var b2Vec2 = Box2D.Common.Math.b2Vec2 tới dòng b2DebugDraw = Box2D.Dynamics.b2DebugDraw; chỉ đơn giản thay vì dùng ‘Box2D. Dynamics. b2FixtureDef’ thì chúng ta chỉ cần dùng b2FixtureDef cho ngắn gọn



Tạo một World và một BoxPolygon và Các Đối Tượng Cố Định

Write a comment

New comments have been disabled for this post.

February 2014
M T W T F S S
January 2014March 2014
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28