【发布时间】: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