
Simple::Simple(const wxString& title)
:wxframe(NULL,-1,title,wxPoint(-1,-1),wxSize(800,600))
{
SetBackgroundStyle(wxBG_STYLE_PAINT);
srand(time(NULL));
timer = new wxTimer(this,-1);
nWidth = GetSize().GetWidth();
nHeight = GetSize().GetHeight();
float x = 0.0f;//x轴重力
float y = 10.0f;//y轴重力 9.8简化为10.0,方便计算
b2Vec2 gravity(x, y);
world = new b2World (gravity);
//*** 一、画地面 ***
//1.地面的运动各状态等属性
b2BodyDef groundDef;
groundDef.type = b2_staticBody;//地面是静止的
groundDef.position = b2Vec2(0,(nHeight-50)/PTM_RATIO);//位置
b2Body* groundBody = world->CreateBody(&groundDef);
//2.形状
b2PolygonShape groundShape;//多边形
groundShape.SetAsBox(nHeight/PTM_RATIO,1);//在物理世界中的半长 的 半宽 是多少米
//3.地面的属性
b2FixtureDef groundFixtureDef;
groundFixtureDef.shape = &groundShape;//形状
groundFixtureDef.density = 1;//密度
groundFixtureDef.friction = 0.3; //摩擦系数
groundBody->CreateFixture(&groundFixtureDef);
//*** 二、画物体 1 ***
//1.物体的运动和状态相关属性,如类型、线速度、角速度等。
b2BodyDef def;
def.position = b2Vec2(64/PTM_RATIO,3/PTM_RATIO);
def.type = b2_dynamicBody;
def.linearVelocity = b2Vec2(0,10.0);
b2Body* body = world->CreateBody(&def);
//2.物体形状
b2PolygonShape shape;
shape.SetAsBox(0.5/PTM_RATIO,0.5/PTM_RATIO);//设定边框.这是一个向量,本质上说他就是一个形状的中心坐标
//3.物体的物质属性,如密度、摩擦系数、弹性系数等,还有物体的形状。
b2FixtureDef fixtureDef;
fixtureDef.shape = &shape;
fixtureDef.density =1;//密度
fixtureDef.friction =0.3;//摩擦系数
fixtureDef.restitution =0.1;//弹性
body->CreateFixture(&fixtureDef);
//*** 三、画物体 2 球形 ***
//1.物体的运动和状态相关属性,如类型、线速度、角速度等。
b2BodyDef defCircle;
defCircle.type = b2_dynamicBody;
defCircle.position = b2Vec2(164/PTM_RATIO,3/PTM_RATIO);
defCircle.linearVelocity = b2Vec2(0,10.0);
defCircle.linearDamping = 0.3;
b2Body* bodyCircle = world->CreateBody(&defCircle);
//2.物体形状
b2CircleShape shapeCircle;
shapeCircle.m_p = b2Vec2(0,0);
shapeCircle.m_radius =0.5/PTM_RATIO;
// shapeCircle.SetAsBox(0.5,0.5);//设定边框.这是一个向量,本质上说他就是一个形状的中心坐标
//3.物体的物质属性,如密度、摩擦系数、弹性系数等,还有物体的形状。
b2FixtureDef fixtureDefCircle;
fixtureDefCircle.shape = &shapeCircle;
fixtureDefCircle.density =1;//密度
fixtureDefCircle.friction =0.6;//摩擦系数
fixtureDefCircle.restitution =0.6;//弹性
bodyCircle->CreateFixture(&fixtureDefCircle);
// simullation.
timeStep = 1.0f / 60.0f;//delta延迟几秒的画面
velocityIterations = 8;//
positionIterations = 3;//
Bind(wxEVT_PAINT,wxPaintEventHandler(Simple::OnPaint),this);
Bind(wxEVT_TIMER,wxCommandEventHandler( Simple::OnTimer),this);
timer->Start(100);
Centre();
}