Система координат в SpriteKit

Я довольно запутался с системой координат spritekit. Мне нужны разъяснения по двум случаям.

Случай 1:

Когда узел спрайта добавляется в качестве дочернего к сцене:

SKSpriteNode * blueBall = [SKSpriteNode spriteNodeWithImageNamed:@"hRedBall.png"];
blueBall.name=@"blueball";
blueBall.size=CGSizeMake(75, 75);
blueBall.position=point; //I am varying this point
[self addChild:blueBall];

Я каждый раз добавлял узел в разные точки. Это точки, в которые я добавил узел:(100x100)(200x200)(300x300)(400x400)(900,600)

И на моем устройстве iphone 5 они выглядят так:

Если вы посмотрите на 100x100, когда я добавляю спрайт в точку (100,100), на устройстве, когда я регистрирую положение узла, он показывает мне (99,9,138,17), что является огромной разницей по сравнению с точкой (100,100).

Несмотря на то, что есть изменения в других точках, я пренебрегаю ими, поскольку разница слишком мала для других точек.

-(void)didMoveToView:(SKView *)view {
    /* Setup your scene here */
      [self bounceTheBlueBallAtPoint:CGPointMake(100, 100)];

}

    -(void)bounceTheBlueBallAtPoint:(CGPoint)point{


    SKSpriteNode * blueBall = [SKSpriteNode spriteNodeWithImageNamed:@"hRedBall.png"];
    blueBall.name=@"blueball";
    blueBall.size=CGSizeMake(75, 75);

    blueBall.physicsBody=[SKPhysicsBody bodyWithCircleOfRadius:blueBall.frame.size.width/2];


    blueBall.physicsBody.categoryBitMask=blueBallHitCategory;
    blueBall.physicsBody.collisionBitMask=blueBallHitCategory|pinkBallHitCategory|wallHitCategory;
    blueBall.physicsBody.contactTestBitMask=blueBallHitCategory|pinkBallHitCategory|wallHitCategory;

    blueBall.physicsBody.dynamic=YES;
    blueBall.physicsBody.affectedByGravity=NO;
    blueBall.physicsBody.restitution=1.0;
    blueBall.physicsBody.friction=0.0;
    blueBall.physicsBody.linearDamping=0.0;
    blueBall.physicsBody.angularDamping=0.0;

    blueBall.position=point;

    [self addChild:blueBall];


    //applying impulse to bounce off
//    CGVector impulse = CGVectorMake(30.0,60.0);
//    [blueBall.physicsBody applyImpulse:impulse];
//    

}

Я проверяю положение мяча в этом методе:

      -(void)update:(CFTimeInterval)currentTime {
    /* Called before each frame is rendered */

    [self checkSpriteMovement];

   }

    -(void)checkSpriteMovement{

    [self enumerateChildNodesWithName:@"blueball" usingBlock:^(SKNode * _Nonnull node, BOOL * _Nonnull stop) {

        SKSpriteNode *ball=(SKSpriteNode *)node;

        if (ball.physicsBody.resting) {

            NSLog(@"The ball position is %@",NSStringFromCGPoint(ball.position));
        }

    }];

}

Случай 2:

Допустим, у меня есть фоновый узел спрайта, и я добавляю узел ball в этот фоновый узел вместо добавления узла ball в сцену.

 _background = [SKSpriteNode spriteNodeWithImageNamed:@"parkImage.jpg"];
_background.size = self.frame.size; //frame size is (1024x768)
_background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
[self addChild:_background];

а затем я добавляю узел шара к этому фону:

[_background addChild:blueBall];

Это фоновый узел добавлен:

Теперь я попытался добавить мяч к добавленному фону:

В точке: (100 100):

В точке: (- 280, -150)

Я также хотел бы обсудить третий случай:

Случай 3:

Я хочу, чтобы на другом узле был спрайт backgorund под названием ring. А позже я хочу добавить мяч на задний план. Таким образом, будет 2 дочерних узла.

   _ringNode=[SKSpriteNode spriteNodeWithImageNamed:@"hue_ring.png"];
_ringNode.size=CGSizeMake(80, 80);
_ringNode.position=CGPointMake(0, 0);  //center point of background in this case
_ringNode.anchorPoint=CGPointMake(0.5,0.5);
_ringNode.name=kRingNodeName;
[_background addChild:_ringNode];

поэтому кольцо будет здесь:

А теперь я хочу добавить шариковый узел к фоновому узлу:

Я использовал тот же код, чтобы добавить мяч в точку (-280, -150):

Почему происходит изменение в системе координат узлов сцены и спрайта?

Еще одна проблема, с которой я сталкиваюсь:

Узлы не добавляются в сцену должным образом. Даже если сцена запущена, узлы не видны пользователю, но я вижу количество узлов, которое говорит, что на экране есть узлы. Мне нужно снова запустить код, чтобы увидеть узлы добавлены правильно на сцену. Это происходит раз в 4 раза. Мне просто нужно остановить код и запустить его снова, чтобы увидеть шары на экране, иначе я вижу только фон без каких-либо шариков, хотя я добавляю их в фон.

Почему это происходит?

Я добавляю все узлы вdidMoveToView

Ответы на вопрос(2)

Ваш ответ на вопрос