2012-11-28 17 views
0

沒有可行的轉換我嘗試實現聯繫監聽 Box2D的 * 的cocos2d *。我想整合NSNotificationCenterPostSolve功能,但是當我嘗試來點對象: parametr我已經得到了錯誤:通過Box2d中的NSNotificationCenter發送C++類對象。錯誤:從 'MyContact' 到 '身份證'

No viable conversion from 'MyContact' to 'id' 

我如何通過NSNotificationCenter發送MyContact對象?

MyContactListener類

// 
    // MyContactListener.m 
    // Box2DPong 
    // 
    // Created by Ray Wenderlich on 2/18/10. 
    // Copyright 2010 Ray Wenderlich. All rights reserved. 
    // 

    #import "MyContactListener.h" 
    #import "ConfigMacro.h" 

    MyContactListener::MyContactListener() : _contacts(),_contactsObjects(){} 

    MyContactListener::~MyContactListener() {} 

    void MyContactListener::BeginContact(b2Contact* contact) { 

     b2Body *bodyA = contact->GetFixtureA()->GetBody(); 
     b2Body *bodyB = contact->GetFixtureB()->GetBody(); 

     if(bodyA->GetUserData() != NULL && bodyB->GetUserData() != NULL) 
     { 
      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) { 

     b2Body *bodyA = contact->GetFixtureA()->GetBody(); 
     b2Body *bodyB = contact->GetFixtureB()->GetBody(); 

     if(bodyA->GetUserData() != NULL && bodyB->GetUserData() != NULL) 
     { 
     int32 count = contact->GetManifold()->pointCount; 
     float32 maxImpulse = 0.0f; 
     b2Vec2 collision; 

     for (int32 i = 0; i < count; ++i) { 
      maxImpulse = b2Max(maxImpulse, impulse->normalImpulses[i]); 
      if (i == 0) { 
       b2WorldManifold worldManifold; 
       contact->GetWorldManifold(&worldManifold); 
       collision = worldManifold.points[0]; 
      } 
     } 
     MyContact myContact = { contact->GetFixtureA(), contact->GetFixtureB(), maxImpulse, collision }; 

     [[NSNotificationCenter defaultCenter] postNotificationName:kReceivedImpulse object:myContact userInfo:nil]; 

     }  
    } 

回答

1

object:參數應該是一個指向Objective-C的對象 - 你想傳遞什麼看起來像一個結構。

+0

好吧,我已經做了MyContactObjectClass類,現在我可以通過NSNotificationCenter發送這個類對象。 但現在再後,我收到通知的消息,我嘗試創建b2Body和我有另外一個錯誤後: 斷言失敗:(IsLocked()==假),功能CreateBody,文件 燦NSNotificationCenter鎖定了b2World? –

+0

@AlexanderSharunov:它不知道什麼是'b2World',所以不,它不能。用你的身體創建代碼發佈一個新問題,看看是否有人可以提供幫助。 – molbdnilo

+0

也許你可以幫我提問:http://stackoverflow.com/questions/13515411/calculation-the-square-of-intersection-two-box2d-b2polygon –

相關問題