触摸我的夹具失败了

时间:2013-01-15 21:27:19

标签: ios cocos2d-iphone box2d

我正试图在我的Cocos2d / Box2d应用程序中点击一个掉落的物体。

这是我的touchesBegan代码:

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *myTouch = [touches anyObject];
    CGPoint location = [myTouch locationInView:[myTouch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];
    b2Vec2 locationWorld = b2Vec2(location.x/PTM_RATIO, location.y/PTM_RATIO);

    for(b2Body *b = world->GetBodyList(); b; b=b->GetNext()) {
        b2Vec2 bPos = b->GetPosition();
        for (b2Fixture *f = b->GetFixtureList(); f; f=f->GetNext()) {

            if (f->TestPoint(locationWorld)) {
                NSLog(@"hit it!");
            }

        }
    }

我的世界里有2个物体,地面和坠落的物体。我的引力真的很慢,所以触摸它不是一个问题。奇怪的是,我的立场似乎很多!

在最后一次运行的locationWorld(我点击的地方)是:

Printing description of locationWorld:
(b2Vec2) locationWorld = {
  x = 7.90625
  y = 9.875
}

我经历了两次外循环,每个身体一次,然后得到:

Printing description of bPos:
(b2Vec2) bPos = {
  x = 3.03125
  y = 19.6643
}
Printing description of bPos:
(b2Vec2) bPos = {
  x = 8.59375
  y = 17.4969
}

奇怪的是第二个身体,即(8.59,17.49)报告的身体应该是坠落的物体,但Y坐标是偏离的。

这是我的第一个cocos2d / box2d应用程序,所以我确定我错过了一些明显的东西。我一直在谷歌搜索一下,这似乎应该有效。

感谢您的帮助。

在下面看到我的答案,我的代码在这里是正确的,我正在不正确地设置我的工具。

1 个答案:

答案 0 :(得分:0)

好吧,现在这种情况很有效,但我确信我还会有另外一个问题。

当我在上面运行时,我创建了一个相当小的动态框,这样物品会堆积在地上,相互重叠。

  

dynamicBox.SetAsBox(.25f,.25f)

这就是原因。当我打开这个更大的东西时,请说:

  

dynamicBox.SetAsBox((spriteSize.width / PTM_RATIO)/ 4,(spriteSize.height / PTM_RATIO)/ 4);

然后用上面的代码可以触摸身体。 (所以我的问题需要重新制定,因为我希望对象堆积起来,相互重叠。

我也不知道为什么我需要将大小除以4以使物品彼此接近,这简直困扰我。