Cocos2d iphone Box2d Cocos2d ContactListener检测碰撞

Cocos2d iphone Box2d Cocos2d ContactListener检测碰撞,cocos2d-iphone,box2d,collision,Cocos2d Iphone,Box2d,Collision,我的问题很简单,但我无法解决 我有一个旋转的雷达,还有一个用操纵杆移动的播放器 嗯,我只想检测雷达和播放器之间的碰撞。当两者都在移动时,它工作得非常完美,但当雷达在移动,而我的播放器不在时,它就不工作了 这里有检测它的代码以及它是如何工作的: //moves radar [self schedule:@selector(loopRadar) interval: 12]; //moves player with joystick body->SetLinearVelocit

我的问题很简单,但我无法解决

我有一个旋转的雷达,还有一个用操纵杆移动的播放器

嗯,我只想检测雷达和播放器之间的碰撞。当两者都在移动时,它工作得非常完美,但当雷达在移动,而我的播放器不在时,它就不工作了

这里有检测它的代码以及它是如何工作的:

//moves radar
    [self schedule:@selector(loopRadar) interval: 12];

//moves player with joystick
    body->SetLinearVelocity(b2Vec2(scaledVelocity.x*dt, scaledVelocity.y*dt));
    actor.position = ccp(body->GetPosition().x * PTM_RATIO,
                         body->GetPosition().y * PTM_RATIO);

// DETECTS COLLISION BETWEEN RADAR AND PLAYER
    std::vector<MyContact>::iterator pos;
    for(pos = _contactListener->_contacts.begin();
        pos != _contactListener->_contacts.end(); ++pos) {
        MyContact contact = *pos;



        if ((contact.fixtureA == radarBody->GetFixtureList() && contact.fixtureB == body->GetFixtureList()) ||
            (contact.fixtureA == body->GetFixtureList() && contact.fixtureB == radarBody->GetFixtureList())) {

            //DO SOMETHING LIKE GAME OVER



        }

    }
//ENDS COLLISION
//移动雷达
[自调度:@selector(loopRadar)间隔:12];
//用操纵杆移动玩家
body->SetLinearVelocity(b2Vec2(scaledVelocity.x*dt,scaledVelocity.y*dt));
actor.position=ccp(body->GetPosition().x*PTM_比率,
body->GetPosition().y*PTM_比率);
//检测雷达和播放器之间的碰撞
std::vector::iterator pos;
对于(pos=_contactListener->_contacts.begin();
pos!=\u contactListener->\u contacts.end();++pos){
MyContact contact=*位置;
如果((contact.fixtureA==radarBody->GetFixtureList()&&contact.fixtureB==body->GetFixtureList())||
(contact.fixtureA==body->GetFixtureList()&&contact.fixtureB==radarBody->GetFixtureList()){
//做一些类似游戏结束的事情
}
}
//结束碰撞
MycontactListener类:

#import "MyContactListener.h"

MyContactListener::MyContactListener() : _contacts() {
 }

 MyContactListener::~MyContactListener() {
 }

void MyContactListener::BeginContact(b2Contact* contact) {
// We need to copy out the data because the b2Contact passed in
// is reused.
MyContact myContact = { contact->GetFixtureA(), contact->GetFixtureB() };
_contacts.push_back(myContact);
}

void MyContactListener::EndContact(b2Contact* contact) {
MyContact myContact = { contact->GetFixtureA(), contact->GetFixtureB() };
std::vector<MyContact>::iterator pos;
pos = std::find(_contacts.begin(), _contacts.end(), myContact);
if (pos != _contacts.end()) {
    _contacts.erase(pos);
}
}

void MyContactListener::PreSolve(b2Contact* contact,
                             const b2Manifold* oldManifold) {
}

void MyContactListener::PostSolve(b2Contact* contact,
                              const b2ContactImpulse* impulse) {
}
#导入“MyContactListener.h”
MyContactListener::MyContactListener():_contacts(){
}
MyContactListener::~MyContactListener(){
}
void MyContactListener::BeginContact(b2Contact*contact){
//我们需要复制数据,因为B2B联系人传入了
//重复使用。
MyContact MyContact={contact->GetFixtureA(),contact->GetFixtureB()};
_触点。推回(myContact);
}
void MyContactListener::EndContact(b2Contact*contact){
MyContact MyContact={contact->GetFixtureA(),contact->GetFixtureB()};
std::vector::iterator pos;
pos=std::find(_contacts.begin(),_contacts.end(),myContact);
如果(位置=_contacts.end()){
_触点。擦除(pos);
}
}
void MyContactListener::预解决(b2Contact*contact,
常数b2Manifold*oldManifold){
}
void MyContactListener::PostSolve(b2Contact*联系人,
常数(脉冲*脉冲){
}
所以,问题是,当雷达穿过玩家而玩家没有移动时,它不会检测到碰撞,但当两者都在移动时,它可以完美地工作

有什么建议吗?
多谢各位

像“LearnCos2D”所说的那样添加这些线条,让两个身体都清醒过来

    body->SetAwake(TRUE);
    radarBody->SetAwake(TRUE);

多谢各位

你试过禁用玩家和雷达身体的睡眠吗?成功了!非常感谢你!!