Я реализовал перетаскивание на объекте спрайта следующим образом..
-(BOOL)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
CGPoint location = [[Director sharedDirector] convertCoordinate: [touch locationInView:touch.view]];
[diskSprite setPosition:ccp(location.x , location.y )];
return kEventHandled;
}
но это перетаскивание не является гладким....., когда я перетаскиваю быстро с моим ползунком объект, оставленный от пути.
Спасибо
Я не совсем понимаю, что вы имеете в виду под "объектом, оставленным от пути". Полагаю, вы имеете в виду, что если провести пальцем по экрану по дуге или кругу, то спрайт "перепрыгнет" из точки в точку, а не будет точно следовать за пальцем. Правильно ли это?
Если вы хотите, чтобы спрайты точно следовали по пути, вам нужно будет создать путь, а затем установить, что спрайты будут следовать по нему. Теперь вы просто устанавливаете спрайт в положение касания, но при "перетаскивании" не будет создаваться событие для каждого пикселя, к которому он прикасается.
.
Довольно легко создать путь для полученных прикосновений, а примеры кода можно найти здесь и там. Однако, если скорость спрайта (в пикселях на кадр) слишком высока, вы всегда увидите его "скачок", даже если используете гладкий путь.
Пример:
Вы можете оживить спрайта по круговой дорожке. Если вы анимируете его, чтобы завершить траекторию за 1 секунду, то, скорее всего, увидите гладкую анимацию. Но если она проходит с большой скоростью, как полный круг в 4 кадра, то вы увидите свою спрайту не в гладком круге, а в 4 местах.
Если вы хотите "исправить" это, то вам нужно будет посмотреть на блендинг, или определить максимальную скорость для приемлемого движения, и замедлить спрайт, когда он слишком быстрый.
Я надеюсь, что это ответ на ваш вопрос. Если он неясен, не стесняйтесь редактировать свой вопрос или добавить комментарий к моему ответу
.У меня была такая же проблема с моей игрой. Операции перетаскивания казались прерывистыми. Я считаю, что причина в том, что события касания не генерируются достаточно быстро, чтобы выглядеть гладко.
Чтобы решить проблему, я сгладил движение, выполнив действие со спрайтом в направлении желаемого места, вместо того, чтобы сразу же устанавливать позицию.