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