我试图在我的 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!");
}
}
}
我的世界中有两个物体,地面和坠落物体。我的重力真的很慢,所以触摸它应该不是问题。奇怪的是,我的位置似乎偏离了很多!
在上次运行 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 应用程序,所以我确定我遗漏了一些明显的东西。我已经在谷歌上搜索了一段时间,这似乎应该可以工作。
谢谢你的帮助。
请参阅下面的答案,我的代码是正确的,我设置的设备不正确。