Гладко перетащите Sprite в cocos2d - iPhone

Я реализовал перетаскивание на объекте спрайта следующим образом..

-(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;
}

но это перетаскивание не является гладким....., когда я перетаскиваю быстро с моим ползунком объект, оставленный от пути.

Спасибо

5
задан skaffman 7 January 2010 в 13:56
поделиться

2 ответа

Я не совсем понимаю, что вы имеете в виду под "объектом, оставленным от пути". Полагаю, вы имеете в виду, что если провести пальцем по экрану по дуге или кругу, то спрайт "перепрыгнет" из точки в точку, а не будет точно следовать за пальцем. Правильно ли это?

Если вы хотите, чтобы спрайты точно следовали по пути, вам нужно будет создать путь, а затем установить, что спрайты будут следовать по нему. Теперь вы просто устанавливаете спрайт в положение касания, но при "перетаскивании" не будет создаваться событие для каждого пикселя, к которому он прикасается.
. Довольно легко создать путь для полученных прикосновений, а примеры кода можно найти здесь и там. Однако, если скорость спрайта (в пикселях на кадр) слишком высока, вы всегда увидите его "скачок", даже если используете гладкий путь.

Пример:
Вы можете оживить спрайта по круговой дорожке. Если вы анимируете его, чтобы завершить траекторию за 1 секунду, то, скорее всего, увидите гладкую анимацию. Но если она проходит с большой скоростью, как полный круг в 4 кадра, то вы увидите свою спрайту не в гладком круге, а в 4 местах. Если вы хотите "исправить" это, то вам нужно будет посмотреть на блендинг, или определить максимальную скорость для приемлемого движения, и замедлить спрайт, когда он слишком быстрый.

Я надеюсь, что это ответ на ваш вопрос. Если он неясен, не стесняйтесь редактировать свой вопрос или добавить комментарий к моему ответу

.
0
ответ дан 13 December 2019 в 19:28
поделиться

У меня была такая же проблема с моей игрой. Операции перетаскивания казались прерывистыми. Я считаю, что причина в том, что события касания не генерируются достаточно быстро, чтобы выглядеть гладко.

Чтобы решить проблему, я сгладил движение, выполнив действие со спрайтом в направлении желаемого места, вместо того, чтобы сразу же устанавливать позицию.

1
ответ дан 13 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: