我需要让 Cocos2d 相机跟随用户在屏幕上触摸的精灵(附加到 Box2D 主体)。当用户拖动播放器时,我需要它能够去世界其他地方。这必须通过触摸,而不是自动滚动。
我尝试了几种基于教程的方法,但似乎没有解决这个问题。例如,此处提供的解决方案使用 ccTouchesMoved 方法移动 CCCamera?(cocos2d,iphone) @Michael Fredrickson 的整个图层都移动了,但是当它移动时,屏幕上的精灵/身体具有无与伦比的协调性,当我测试它们是否被触摸时,if(fixture->TestPoint(locationWorld))
失败了。
我还查看了这里的教程http://www.learn-cocos2d.com/2012/12/ways-scrolling-cocos2d-explained/但这也不是我想要的。
任何帮助将不胜感激。
编辑:
我在下面接受 Liolik 的回答,因为它让我走上了正确的轨道。然而,难题的最后一部分是使从 getPoint 方法接收到的值成为实例变量,并从中推断出locationWorld
我正在做的事情TestPoint
。像这样:
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);
b2Vec2 diff = b2Vec2(difference.x, difference.y);
for (b2Body* b = _world->GetBodyList(); b; b = b->GetNext()) {
b2Fixture* f = b->GetFixtureList();
while(f != NULL) {
if(f->TestPoint(locationWorld-diff)) {
b2MouseJointDef def;
def.bodyA = _groundBody;
def.bodyB = b;
def.target = locationWorld-diff;
def.maxForce = 9999999.0f * b->GetMass();
_mouseJoint = (b2MouseJoint*)_world->CreateJoint(&def);
b->SetAwake(true);
}
f = f->GetNext();
}
}