2013-10-06 67 views
4

我遇到了新遊戲精靈的問題...... 我的「賽車」在第一圈完美地追蹤賽道,但從那時起它似乎在每圈結束時獲得抵消。有人能告訴我我做錯了什麼嗎?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

這正是我用來創建該路徑。大聲笑謝謝你,你的答案很好,它的工作完美 – Farini