2013-02-18 4 views
0

Я пытаюсь перемещать спрайты в зависимости от направления движения на экране. До сих пор, это код, который я придумал на основе примеров в Интернете:Прокрутка вверх в cocos2d

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
UITouch *touch = [touches anyObject]; 
CGPoint location = [touch locationInView:[touch view]]; 
location = [[CCDirector sharedDirector]convertToGL:location]; 
endTouch = location; 

float swipeLength = endTouch.x - beginTouch.x; 
float swipeY = endTouch.y - beginTouch.y;  

if(swipeY > 0) 
{ 
if(swipeLength == 0){ 
//Do action here 
}}} 

Теперь мой вопрос, мне нужно, чтобы ограничить диапазон endTouch.x. Например, оно должно быть больше 100, но меньше 150. Я хочу делать действия только тогда, когда салфетки вверх или под определенным углом от чего-то вроде 50 до 120 градусов, а не путем скольжения вбок или вниз. Как я могу это реализовать?

ответ

1

У меня возникли проблемы с пониманием вашего вопроса. Но если вы хотите получить только восходящий салфетки, вы должны сделать следующее:

  1. Получить touchEnd.y - beginTouch.y.
  2. Если результат отрицательный, то это не было восходящим ударом.
  3. Else продолжить и выяснить, наклон float slope = (touchEnd.y - touchBegin.y)/(touchEnd.x - touchBegin.x).
  4. Создайте порог, если наклон не достаточно крутой, тогда салфетка не вверх, а боковая с точки зрения направления. if (abs(slope) >= threshold) { //It's an upward swipe }

Не уверен, что вы пытаетесь получить на с:

Как, например, оно должно быть больше, чем 100, но меньше, чем 150.

Но если вы хотите ограничить угол, который составляет для восходящего салфетки, вы можете сделать:

  1. Преобразование градусов в склон (tan(theta)) Посмотрите на второе уравнение here за то, почему вы используете tan(theta).
  2. Так что если вы хотите, чтобы ваш наклон в пределах диапазона 90 + - 30 град: threshold = tan((pi/180)*30)
+0

Я нашел способ обойти это путем удаления сравнения х-оси, а просто проверить, если разница между beginTouch.y и endTouch.y больше 1. Если это так, тогда спрайт будет двигаться, если это не так, тогда ничего не происходит. Благодарим за ваше предложение. – user1597438

Смежные вопросы