Параметры метода CGPathMoveToPoint/CGPathAddLineToPoint сбивают с толку

Я использую приведенный здесь ответ SpriteKit SKPhysicsBody с помощью вспомогательного инструмента многоугольника для создания полигоны физических тел для моих узлов спрайта.

Но параметры смещения методов CGPathMoveToPoint/CGPathAddLinetoPoint сбивают с толку (я также не могу найти ссылку в документе Apple).

В коде, сгенерированном скриптом, offsetX и offsetY определены как:

CGFloat offsetX = sprite.frame.size.width * sprite.anchorPoint.x;
CGFloat offsetY = sprite.frame.size.height * sprite.anchorPoint.y;

В то время как в GIF, представленном там для демонстрации, это:

CGFloat offsetX = sprite.frame.size.width/2; 
CGFloat offsetY = sprite.frame.size.height/2;

Оба эти смещения используются для исправления параметров в методах CGPathMoveToPoint/CGPathAddLinetoPoint, таких как:

CGPathMoveToPoint(path, NULL, 0 - offsetX, 0 - offsetY); (for the bottom left corner of the texture)
CGPathAddLineToPoint(path, NULL, 11 - offsetX, 0 - offsetY); 
  1. Зачем нам это смещение?

  2. Для нижнего левого угла текстуры, почему я не могу указать только (0,0), например:

    CGPathMoveToPoint(путь, NULL, 0, 0);

  3. Будет ли это смещение (если необходимо) меняться, когда узел спрайта перемещается по экрану?

  4. Если точка привязки родительской сцены находится в верхнем левом углу, какое должно быть смещение для этих методов?


person DroidHeaven    schedule 31.03.2015    source источник


Ответы (1)


Переменная смещения, на которую вы ссылаетесь, является лишь отправной точкой. Вы можете так же легко заменить переменные фиксированной начальной координатой, например 0,0.

Ваш вопрос касается физического тела, поэтому опорные точки в этом случае не применяются. Координаты физического тела 0,0 всегда центрированы по отношению к ширине и высоте узла. Таким образом, хотя изменение точки привязки для узла влияет на то, как центрируются его координаты, это не влияет на физическое тело.

person sangony    schedule 31.03.2015