Если вы посмотрите на диаграмму в руководстве, это может помочь немного прояснить ситуацию.По сути, когда пользователь касается экрана, у вас будет место {x, y}, где это касание имело место.У вас также есть позиция ниндзя.используя смещение между этими точками (xoff
и yoff
), вы можете создать прямоугольный треугольник, который дает общее расстояние между двумя точками (как его гипотенуза).Вы можете использовать теорему Пифагора для вычисления этого.
Однако;в этом случае точка касания не используется в качестве «целевого значения» - вместо этого цель состоит в том, чтобы звезда ниндзя вылетела в направлении касания и продолжала двигаться, пока не исчезнет с экрана.
(Как правило, вы вычисляете разницу между касанием и положением ниндзя как вектор, но я думаю, что учебник пытается представить функции Cocos2D, поэтому упрощает его).
Как хочет Рэйиспользуйте CCMoveTo
на звездном спрайте ниндзя, он не может напрямую задавать вектор / скорость, поэтому должен дать отдельную конечную точку.Звездный спрайт будет двигаться по прямой линии, пока не достигнет этой точки.
Таким образом, в этом случае отношение представляет собой отношение ширины меньшего треугольника к высоте меньшего треугольника (ниндзя на ощупь).Когда он перемещает позицию цели снаряда x к краю экрана
int realX = winSize.width + (projectile.contentSize.width/2);
, чтобы гарантировать, что звезда будет стрелять за пределы экрана, он может использовать то же соотношение, чтобы гарантировать, что цель уположение вверх / вниз настолько, насколько это необходимо, чтобы траектория полета оставалась под тем же углом.