相机跟随被触摸的身体

时间:2013-05-30 09:12:19

标签: cocos2d-iphone

我需要让Cocos2d相机跟随用户在屏幕上触摸的精灵(附在Box2D机身上)。当用户拖动玩家时,我需要它能够去世界的其他地方。这必须通过触摸,而不是自动滚动。

我尝试了几种基于教程的方法,但似乎没有解决这个问题。例如@Michael Fredrickson在这里提供的解决方案Move CCCamera with the ccTouchesMoved method? (cocos2d,iphone)有整个图层移动,但是当它移动时,屏幕上的精灵/物体具有无与伦比的协调,当我测试它们是否被触摸时,{ {1}}失败。

我也看了http://www.learn-cocos2d.com/2012/12/ways-scrolling-cocos2d-explained/这里的教程,但这也不是我想要的。

非常感谢任何帮助。

编辑:

我接受Liolik的回答,因为它让我走上正轨。但是,最后一个难题是使从getPoint方法接收的值成为一个实例变量,并从我if(fixture->TestPoint(locationWorld))执行的locationWorld中推导出它。像这样:

TestPoint

2 个答案:

答案 0 :(得分:1)

更新功能中的

CGPoint direction = [self getPoint:myBody->GetPosition()];
[self setPosition:direction];


- (CGPoint)getPoint:(b2Vec2)vec
{
    CGSize screen = [[CCDirector sharedDirector] winSize];

    float x = vec.x * PTM_RATIO;
    float y = vec.y * PTM_RATIO;

    x = MAX(x, screen.width/2);
    y = MAX(y, screen.height/2);

    float _x = area.width  -  (screen.width/2);
    float _y = area.height - (screen.height/2);

    x = MIN(x, _x);
    y = MIN(y, _y);

    CGPoint goodPoint = ccp(x,y);

    CGPoint centerOfScreen = ccp(screen.width/2, screen.height/2);
    CGPoint difference = ccpSub(centerOfScreen, goodPoint);

    return difference;
}

答案 1 :(得分:1)

因此,如果我理解正确,当精灵位于屏幕中间时,背景是静止的,精灵跟随你的手指,但当你向边缘滚动时,相机开始平移?

我的游戏“星际挖掘机”中有一些大致类似的东西,屏幕中间有一艘船只在自己的层面上飞行,并且在船舶向主要世界层发射子弹时遇到同样的问题

继承人我做了什么:

float thresholdMinX = winSize*1/3;
float thresholdMaxX = winSize*2/3;

if(touch.x > thresholdMaxX) //scrolling right
{
  self.x += touch.x - thresholdMaxX;
}
else if(touchX < thresholdMinX)
{
  self.x += thresholdMinX - touchX;
}
else
{
  sprite.position = touch;
}
CGPoint spritePointInWorld = ccp(sprite.x - self.x, sprite.y - self.y);

然后每次计算碰撞时,都需要重新计算世界中精灵的“实际”位置,即屏幕位置减去世界偏移量,而不是精灵屏幕位置。