【问题标题】:Can't access object property from C++ file (Cocos2D/Box2d)无法从 C++ 文件 (Cocos2D/Box2d) 访问对象属性
【发布时间】:2012-06-10 10:39:32
【问题描述】:

我正在使用 Box2d 实现一个 Contact Listener,它是一个 C++ .mm 文件。

每当两个气泡发生碰撞时,我都想知道以便执行某些操作。这是我的代码:

void ContactListener::BeginContact(b2Contact* contact)
{

    b2Body* bodyA = contact->GetFixtureA()->GetBody();
    b2Body* bodyB = contact->GetFixtureB()->GetBody();
    if (bodyA->GetUserData() != NULL && bodyB->GetUserData() != NULL)
    {
        BubbleSprite* bNodeA = (BubbleSprite*)bodyA->GetUserData();
        BubbleSprite* bNodeB = (BubbleSprite*)bodyB->GetUserData();

        BOOL oneIsBeingTouched;
        if(bNodeA.isDrag == YES || bNodeB.isDrag == YES) oneIsBeingTouched = YES;
...

BubbleSprite 的property BOOL isDrag 表示它们当前是否被用户拖动。我遇到的问题是:

    Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 
'-[CCSprite isDrag]: unrecognized selector sent to instance 0x1ed504a0'

BubbleSprite 是 CCSprite 的子类。 isDrag 在其文件中正确声明和合成。有人对发生的事情有任何想法吗?谢谢

【问题讨论】:

  • 这里stackoverflow.com/questions/10968425/…是今天的另一个类似问题,通过重新启动xcode并将某些文件重新导入项目来解决。
  • 您提到此代码用于“每当两个气泡碰撞时”,但您没有检查碰撞是否在两个气泡之间。如果世界上的每个物体都是一个气泡,那么这仍然可以,但否则你不能假设碰撞发生在两个气泡之间。

标签: iphone ios xcode cocos2d-iphone box2d


【解决方案1】:

我建议使用 getter,像这样创建你的属性。

@property (nonatomic, assign, getter=isDrag) BOOL dragging;

当然还有@synthesize。现在您可以使用-setDragging: 和[bNodeA isDrag]。没什么大不了的,但应该更容易理解代码。

【讨论】:

    【解决方案2】:

    尝试使用

     if (bNodeA.drag == YES) ...
    

    或

    if ([bNodeA isDrag] == YES) ...
    

    【讨论】:

    • 同样的错误。 CCSprite 上无法识别的选择器。它应该在 BubbleSprite 上运行...
    • 您自己添加drag 属性与子类化吗? CCSprite 和 CCNode 都没有。
    • 是的,isDrag 是属性名称。正如我所提到的,BubbleSprite 是 CCSprite 的子类。
    • 如果您将该属性命名为isDrag,它将可以通过[node isIsDrag] 访问。检查stackoverflow.com/questions/4864239/using-a-bool-property
    • 啊,有趣,不知道“is”前置。无论如何,为简单起见,我将其重命名为“拖动”。但是,我仍然收到相同的消息。当它应该询问 BubbleSprite 然后抛出无法识别的选择器错误时,它会询问 CCSprite 的拖动属性。不知道为什么...谢谢
    猜你喜欢
    • 2021-12-08
    • 2021-11-06
    • 2014-03-10
    • 1970-01-01
    • 2011-07-05
    • 2019-09-05
    • 1970-01-01
    相关资源
    最近更新 更多