Cocos2d iphone 创建处理联系人的类时出现的问题

Cocos2d iphone 创建处理联系人的类时出现的问题,cocos2d-iphone,box2d,box2d-iphone,Cocos2d Iphone,Box2d,Box2d Iphone,一直以来,我都在处理ccphysisprite类中的联系人,因为我主要将userdata设置为ccphysisprite。详情如下: ContactListenerClass.mm: void ContactListenerClass:: BeginContact(b2Contact *contact){ b2Fixture *fixtureA = contact->GetFixtureA(); b2Fixture *fixtureB = contact->

一直以来,我都在处理ccphysisprite类中的联系人,因为我主要将userdata设置为ccphysisprite。详情如下:

ContactListenerClass.mm:

void ContactListenerClass:: BeginContact(b2Contact *contact){

b2Fixture       *fixtureA = contact->GetFixtureA();
b2Fixture       *fixtureB = contact->GetFixtureB();
b2Body          *fixtureABody = fixtureA->GetBody();
b2Body          *fixtureBBody = fixtureB->GetBody();

CCPhysicsSprite* physicsSprite = (CCPhysicsSprite*)fixtureABody->GetUserData();
CCPhysicsSprite* physicsSprite2 = (CCPhysicsSprite*)fixtureBBody->GetUserData();

[physicsSprite spritesHadContact:physicsSprite2];

}
#import "ContactListenerClass.h"
#import "HelloWorldLayer.h"


void ContactListenerClass:: BeginContact(b2Contact *contact)
{


b2Fixture       *fixtureA = contact->GetFixtureA();
b2Fixture       *fixtureB = contact->GetFixtureB();
b2Body          *fixtureABody = fixtureA->GetBody();
b2Body          *fixtureBBody = fixtureB->GetBody();

CCPhysicsSprite* physicsSprite = (CCPhysicsSprite*)fixtureABody->GetUserData();
CCPhysicsSprite* physicsSprite2 = (CCPhysicsSprite*)fixtureBBody->GetUserData();

[contactHandler spritesHadContact:physicsSprite otherSprite:physicsSprite2];

}
spritesHadContact方法属于CCPhysicsPrite.mm类:

-(void)spritesHadContact:(CCPhysicsSprite*)secondPhysicsSprite {
    int tag1 = self.tag;
    int tag2 = secondPhysicsSprite.tag;

    if ((tag1 == 30) && (tag2 == 40 )) || ((tag1 == 40) && (tag2 == 30))  {
      CCLOG(@"proceed to handle contact");
    }
上面的例子有点直截了当。但是当我开始创建和销毁关节时,我意识到最好有一个类而不是CCPhysicsPrite来处理联系人。我创建了一个类(contactHandler)来实现这一点,但它不起作用。我不知道我做错了什么。请参阅下文:

ContactHandler.h:

#import "CCPhysicsSprite.h"

@interface ContactHandler : CCPhysicsSprite {

}

-(void)spritesHadContact:(CCPhysicsSprite*)firstPhysicsSprite otherSprite:(CCPhysicsSprite*)secondPhysicsSprite;

@end
ContactHandler.mm:

#import "ContactHandler.h"

@implementation ContactHandler

-(void)spritesHadContact:(CCPhysicsSprite*)firstPhysicsSprite otherSprite:(CCPhysicsSprite*)secondPhysicsSprite {
int tag1 = firstPhysicsSprite.tag;
int tag2 = secondPhysicsSprite.tag;

    if ((tag1 == 30) && (tag2 == 40 )) || ((tag1 == 40) && (tag2 == 30))  {
      CCLOG(@"proceed to handle contact");
}
@end
ContactListenerClass.h:

#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "Box2D.h"
#import "ContactHandler.h"


class ContactListenerClass : public b2ContactListener    {
public:
    ContactHandler* contactHandler;

       void BeginContact(b2Contact* contact);

};
已更新


ContactHandler类中的spritesHadContact方法未将CCLOG打印到控制台。我尝试使用CCLOG查看发生了哪些联系人,但该方法无法识别任何联系人。

请解释问题所在。“不工作”对我不起作用…@iforce2d:我刚刚更新了问题。侦听器中的“contactHandler”对象没有初始化?@Hamdullahshah:我真的不确定初始化“contactHandler”的目的是什么。