2
我想让精灵顺利跟随&根据在屏幕上的触摸旋转。玩家不会被迫触及精灵本身以使其移动,因为他一次只能控制一个精灵。因此,无论触摸在屏幕上,玩家都必须遵循这一运动。这是我到目前为止有:Cocos2D - 让精灵顺利跟随和旋转触摸
在GameScene.m:
- (BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
lastTouchLocation = location;
return YES;
}
- (void) ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
//moveBy determine the translate vector
CGPoint moveBy = ccpSub(lastTouchLocation, location);
[player moveBy:moveBy];
lastTouchLocation = location;
}
而这里的Player.m:
- (float) calculateAngleForNextPoint:(CGPoint) point
{
CGPoint nextPoint = point;
CGPoint pos = self.position;
float offX = nextPoint.x - pos.x;
float offY = nextPoint.y - pos.y;
float angle = atan2f(offY, offX);
angle = CC_RADIANS_TO_DEGREES(angle);
angle = -angle + 90;
return angle;
}
- (void) moveBy:(CGPoint)_pos
{
CGPoint newPos = ccpSub(self.position, _pos);
float angle = [self calculateAngleForNextPoint:newPos];
self.position = newPos;
self.rotation = angle;
}
此代码的工作很好,但转动不平滑,主要是当玩家在屏幕上慢慢地移动他的手指时,精灵变得疯狂!我尝试了很多东西,比如设置动作,但touchMoved方法调用得太快而无法使用动作。
我应该怎么做才能解决这个问题?非常感谢!
你不是因素的运动和旋转应该可能会发生一段时间,而不是瞬间。如果直接将运动和旋转与触摸位置或运动行为进行触摸移动联系起来,您所看到的可能是触摸更新的效果可能相当“跳跃”,而不是平滑渐变。 – LearnCocos2D
我在做幽闭恐怖症时做了类似的事情,但一切都是通过改变旋转等动作完成的。精灵应该“瞄准”新角度,而不是跳到它。那会更顺利。 – PKCLsoft
但由于touchMoved的调用非常迅速,因此每次都会覆盖操作,因此您是如何通过操作来实现的? – RaphBlanchet