Самый простой способ сделать это - сделать следующее:
Конечно, зарегистрируйте CCLayer
в качестве обработчика события касания и реализуйте начало касания,Функции перемещения и завершения.
Создайте в своем классе 2 CGPoint
переменных для хранения позиций касания CURRENT
и PREVIOUS
.Также создайте 2 CCTIme
структуры для хранения времени опроса CURRENT
и PREVIOUSLY
.
Установите расписание для обновления текущего времени (я сделал это в initлюбого соответствующего класса.
т.е.:
- (id)init {
if((self = [super init])) {
[self schedule:@selector(update:)];
timeCURRENT = (ccTime)0;
}
return self;
}
-(void)update:(ccTime)deltaTime {
timeCURRENT += deltaTime;
}
4. в начале начала касания установите предыдущую и текущую переменные в текущее местоположение касания, используяследующее:
-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
touchCURRENT= [touch locationInView: [touch view]];
touchPREVIOUS = touchCURRENT;
timePREVIOUS = timeCURRENT;
...
Затем при касании переместите PREVIOUS на CURRENT и установите CURRENT, используя ту же строку кода, что и выше
-(BOOL)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event {
touchPREVIOUS = touchCURRENT;
touchCURRENT= [touch locationInView: [touch view]];
CGPoint deltaPosition = touchCURRENT - touchPREVIOUS;
ccTime deltaTime = timeCURRENT - timePREVIOUS;
timePREVIOUS = timeCURRENT;
Velocity= deltaPosition / deltaTime.
Обратите внимание, что вычитание CGPoint
может работать не так, как указано выше, вам может потребоваться вычесть отдельные элементы и передать их в CGPoint
фабричный метод.