我正试图在我的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应用程序,所以我确定我错过了一些明显的东西。我一直在谷歌搜索一下,这似乎应该有效。
感谢您的帮助。
在下面看到我的答案,我的代码在这里是正确的,我正在不正确地设置我的工具。
答案 0 :(得分:0)
当我在上面运行时,我创建了一个相当小的动态框,这样物品会堆积在地上,相互重叠。
dynamicBox.SetAsBox(.25f,.25f)
这就是原因。当我打开这个更大的东西时,请说:
dynamicBox.SetAsBox((spriteSize.width / PTM_RATIO)/ 4,(spriteSize.height / PTM_RATIO)/ 4);
然后用上面的代码可以触摸身体。 (所以我的问题需要重新制定,因为我希望对象堆积起来,相互重叠。
我也不知道为什么我需要将大小除以4以使物品彼此接近,这简直困扰我。