我需要让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
答案 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);
然后每次计算碰撞时,都需要重新计算世界中精灵的“实际”位置,即屏幕位置减去世界偏移量,而不是精灵屏幕位置。