Параметрите на метода CGPathMoveToPoint/CGPathAddLineToPoint са объркващи

Използвам предоставения тук отговор SKPhysicsBody на SpriteKit с помощен инструмент за полигони, за да създам полигони от физически тела за моите спрайт възли.

Но параметрите на отместване на методите 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