Box2d Cocos2d ContactListener检测碰撞
问题描述:
我的问题很简单,但我无法修复它。Box2d Cocos2d ContactListener检测碰撞
我有一个雷达是旋转和我有与操纵杆
好动的球员,我只是想探测雷达和球员之间的碰撞。当都在移动时它可以很好地工作,但当雷达正在移动并且我的播放器不是时它不会运行。
在这里,你有代码来检测它,它是如何工作的:
//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
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) {
}
那么,问题是,当雷达经过玩家与玩家ISN”不移动,它不会检测到碰撞,但是当两者移动时,它都可以很好地工作。
任何提示? 非常感谢!
答
曾担任“LearnCocos2D说:”加上几行,同时设置机构清醒
body->SetAwake(TRUE);
radarBody->SetAwake(TRUE);
非常感谢您!
你有没有试过禁用播放器和雷达机构的睡眠? – LearnCocos2D 2013-05-06 21:59:15
工作!非常感谢你!! – mursang 2013-05-07 21:10:52