我不知道如何在我的应用程序中使用此方法
void MyContactListener::PreSolve(b2Contact* contact, const b2Manifold* oldManifold) {
b2WorldManifold worldManifold;
contact->GetWorldManifold(&worldManifold);
b2PointState state1[2], state2[2];
b2GetPointStates(state1, state2, oldManifold, contact->GetManifold());
//NSLog(@"Presolving");
if (state2[0] == b2_addState)
{
const b2Body* bodyA = contact->GetFixtureA()->GetBody();
const b2Body* bodyB = contact->GetFixtureB()->GetBody();
b2Vec2 point = worldManifold.points[0];
b2Vec2 vA = bodyA->GetLinearVelocityFromWorldPoint(point);
b2Vec2 vB = bodyB->GetLinearVelocityFromWorldPoint(point);
b2Vec2 rV = vB - vA;
float32 approachVelocity = b2Dot(rV, worldManifold.normal);
if (-1.5f < approachVelocity && approachVelocity < 0.0f)
{
//MyPlayCollisionSound();
NSLog(@"Not Playing Sound");
}
else
{
NSLog(@"playing the sound");
}
}
}如何在我的HelloWorldLayer.mm中使用此代码请帮助我...我这里有一个问题,我有一个场景,一些物体倒下并撞到静态物体,边缘相同,我实现了b2ContactListener,在我的tick方法中,我检查接触并播放声音,这种方法的问题是,当一个物体不断地与静态物体接触时,声音会无限地叠加在前一个物体上,所以最后我会有巨大的噪音。我能做些什么来避免这种情况?
请帮帮我谢谢......
发布于 2012-08-28 21:51:10
您刚刚在update方法中使用了以下方法,并在调度update方法调用之前声明了它的对象。类似于HelloWorldLayer.h
MyContactListener *contactListener;在HelloworldLayer.mm中
在此之前
[self scheduleupdate];
contactListener=new MyContactListener();
world->setContactListener(contactListener);那么这种类型的错误就不会发生。
发布于 2012-07-11 21:15:32
当两个实体发生碰撞时,将按以下顺序调用b2ContactListener方法:
BeginContact
PreSolve
PostSolve
PreSolve
PostSolve
...etc
EndContact因此,如果要为每个碰撞检测一次实体之间的碰撞,请改用BeginContact或EndContact。但是,这些方法只接受一个b2Contact参数,因此您可能需要在计算中不使用oldManifold值。
https://stackoverflow.com/questions/11432170
复制相似问题