2013-10-06 2 views
4

У меня проблема с New game sprite ... Мой «автомобиль» отлично следит за дорожкой на первом круге, но с этого момента кажется, что он получает смещение в конце каждого круга. Может ли кто-нибудь сказать мне, что я делаю неправильно?SpriteNode не соответствует cgpath

- (void)createSceneContents{ 
    self.backgroundColor = [SKColor blackColor]; 
    self.scaleMode = SKSceneScaleModeAspectFit; 

    // CREATING THE CAR AND THE TRACK 
    SKSpriteNode *myCar = [self newcar]; 
    myCar.position = [[self trackShape] position];; 
    [self addChild:myCar]; 

    SKShapeNode *track = [self trackShape]; 
    track.position = CGPointMake(48, 40); 
    [self addChild:track]; 
} 



- (SKSpriteNode *)newcar{ 
    // GENERATES A RECTANGLE FOR THE SPRITE NODE 
    SKSpriteNode *hull = [[SKSpriteNode alloc] initWithColor:[SKColor grayColor] size:CGSizeMake(20,50)]; 
    CGPathRef pathRef = [[self bPath] CGPath]; 
    // CAR SHOULD FOLLOW THE TRACK 
    // OK ONLY ON THE FIRST LAP 
    SKAction *hover = [SKAction sequence:@[[SKAction followPath:pathRef duration:20.0], 
            ]]; 

    hull.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:hull.size]; 
    hull.physicsBody.dynamic = NO; 
    [hull runAction: [SKAction repeatActionForever:hover]]; 
    return hull; 
} 


-(SKShapeNode *)trackShape{ 
    SKShapeNode *newshape = [[SKShapeNode alloc] init]; 
    newshape.position = CGPointMake(48, 40); 
    newshape.path = [[self bPath] CGPath]; 
    newshape.fillColor = [SKColor clearColor]; 
    newshape.strokeColor = [SKColor blueColor]; 
    newshape.lineWidth = 8; 
    return newshape; 
} 

Это путь ... все в одном классе.

-(UIBezierPath *)bPath{ 
    UIBezierPath* bezierPath = [UIBezierPath bezierPath]; 
    [bezierPath moveToPoint: CGPointMake(48, 40)]; 
    [bezierPath addLineToPoint: CGPointMake(10.5, 147.5)]; 
    [bezierPath addCurveToPoint: CGPointMake(131.5, 209.5) controlPoint1: CGPointMake(10.5, 147.5) controlPoint2: CGPointMake(45.01, 253.16)]; 
    [bezierPath addCurveToPoint: CGPointMake(267.5, 209.5) controlPoint1: CGPointMake(217.99, 165.84) controlPoint2: CGPointMake(259.57, 194.46)]; 
    [bezierPath addCurveToPoint: CGPointMake(283.5, 302.5) controlPoint1: CGPointMake(275.43, 224.54) controlPoint2: CGPointMake(325.48, 263.29)]; 
    [bezierPath addCurveToPoint: CGPointMake(105.5, 327.5) controlPoint1: CGPointMake(241.52, 341.71) controlPoint2: CGPointMake(128.94, 352.5)]; 
    [bezierPath addCurveToPoint: CGPointMake(10.5, 396.5) controlPoint1: CGPointMake(82.06, 302.5) controlPoint2: CGPointMake(-27.5, 333.95)]; 
    [bezierPath addCurveToPoint: CGPointMake(239.5, 448.5) controlPoint1: CGPointMake(48.5, 459.05) controlPoint2: CGPointMake(195.5, 463.67)]; 
    [bezierPath addCurveToPoint: CGPointMake(283.5, 40.5) controlPoint1: CGPointMake(399.5, 40.5) controlPoint2: CGPointMake(375.39, 205.99)]; 
    [bezierPath addCurveToPoint: CGPointMake(153.5, 78.5) controlPoint1: CGPointMake(191.61, -124.99) controlPoint2: CGPointMake(153.5, 78.5)]; 
    [bezierPath addLineToPoint: CGPointMake(48, 40)]; 
    [bezierPath closePath]; 
    return bezierPath; 
} 
+0

это тупик меня! – DogCoffee

ответ

5

Через некоторое время, это мой results

enter image description here

Я слом ваш метод автомобиля, и просто размещены все это в пределах этого.

Мне нужно было настроить положение вашего трека, но, похоже, оно работает.

- (void)createSceneContents{ 
    self.backgroundColor = [SKColor blackColor]; 
    self.scaleMode = SKSceneScaleModeAspectFit; 

    SKSpriteNode *hull = [[SKSpriteNode alloc] initWithColor:[SKColor grayColor] size:CGSizeMake(20,50)]; 
    CGPathRef pathRef = [[self bPath] CGPath]; 

    SKShapeNode *track = [self trackShape]; 
    //track.position = // scrap me.. is set in track shape method 
    [self addChild:track]; 

    hull.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:hull.size]; 
    hull.physicsBody.dynamic = NO; 
    hull.position = CGPointMake(48, 40); 
    [self addChild:hull]; 

    SKAction *hover = [SKAction followPath:pathRef asOffset:NO orientToPath:YES duration:5.0]; 
    [hull runAction: [SKAction repeatActionForever:hover]]; 
} 

В вашем trackShape метод, установите положение 0,0

newshape.position = CGPointMake(0, 0); 
+2

В качестве побочного примечания это приложение ДЕЙСТВИТЕЛЬНО круто http://www.paintcodeapp.com делает рисование путей супер легким .... надеюсь, что яблоко добавит что-то подобное этому в Xcode. – DogCoffee

+0

Это именно то, что я использовал для создания этого пути. lol Спасибо, ваш ответ велик, и он отлично работает – Farini