iphone上如何用box2d实现爆炸效果?

转载自:http://www.oasku.com/?question/view/78.html

iphone上如何用box2d实现爆炸效果?

1.先取得爆炸这点point,然后根据这个点构建一个矩形,保证此点为矩形的中心。(矩形用来模拟爆炸的影响范围)
2.遍历所以的body,如果body在中心点在矩形之内,则:
3.根据爆炸点和body的中心点求出一个角度。
4.根据两点距离设置所给冲量的大小。
5.根据角度和距离对body一个冲量。
这样就模拟出爆炸的效果了
-网上找的,能说明详细点怎么做吗?



//大概是这样的

b2Vec2 d1;

d1.Set(-0.55f, -0.55f);

b2Vec2 d2;

d2.Set(0.55f, 0.55f);

//检测矩形的左下角和右上角两个点

b2AABB aabb;

aabb.lowerBound= body_box2d->GetPosition()+d1;

aabb.upperBound= body_box2d->GetPosition()+d2;

//遍历世界里的所有对象

QueryCallback callback(body_box2d->GetPosition());

body_box2d->GetWorld()->QueryAABB(&callback, aabb);

if (callback.m_fixture){

//取得和矩形有交点的对象

b2Body* body = callback.m_fixture->GetBody();

b2Vec2 vec = body->GetPosition();

//...

//其中QueryCallback是这样的:

class QueryCallback : public b2QueryCallback{

public:QueryCallback(const b2Vec2& point){

m_point = point;

m_fixture = NULL;

}


/// Called for each fixture found in the query AABB.

/// @return false to terminate the query.

bool ReportFixture(b2Fixture* fixture){

b2Body* body = fixture->GetBody();

b2Vec2 vec = body->GetPosition();

//检测框AABB里面有,不算

if(vec.x==m_point.x&&vec.y==m_point.y){

m_fixture = NULL;return TRUE;

}

m_fixture = fixture;

// We are done, terminate the query.

return false;

}

b2Vec2 m_point;

b2Fixture* m_fixture;

};


你可能感兴趣的:(iPhone)