2014-11-06 49 views
0

我試圖用斐波那契式的單詞繪製箭頭曲線。我可能會使用方法調用,而不是稍後將其構建到字符串上,但現在我想保留該字符串。用單詞繪製箭頭曲線(Objective-c cocos2D)

// create string. Initially set to "A" 
NSMutableString *s1 = [[NSMutableString alloc] init]; 

[s1 setString:@"A"]; 

// loop through and replace A and B with the following strings. Toned down iterations to 5 here 

for(int i=0; i<5; ++i){ 

    [s1 replaceOccurrencesOfString:@"A" 
        withString:@"+B-A-B+" 
         options:NSLiteralSearch 
          range:NSMakeRange(0, s1.length)]; 


    [s1 replaceOccurrencesOfString:@"B" 
          withString:@"-A+B+A-" 
        options:NSLiteralSearch 
         range:NSMakeRange(0, s1.length)]; 
} 

// set line color, thickness 
ccDrawColor4F(0.8, 1.0, 0.76, 1.0); 
glLineWidth(1.0f); 

float angle = 0; 

float travelDist = 1; // distance in pixels the line is drawn. Can be changed to whatever 

CGPoint p = CGPointMake(300,100); 

for(int i = 0; i < [s1 length]; i++){ 

    if([[NSString stringWithFormat:@"%c",[s1 characterAtIndex:i]] isEqualToString:@"+"]){ // turn right 

     angle += 60; 

    }else if([[NSString stringWithFormat:@"%c",[s1 characterAtIndex:i]] isEqualToString:@"-"]){ // turn left 

     angle -= 60; 

    }else{ // any other character, draw line 

      float cosAngle = cosf(CC_DEGREES_TO_RADIANS(angle)); 

     float newDist = travelDist * cosAngle; 

     float sinAngle = sinf(CC_DEGREES_TO_RADIANS(angle)); 

     float newDist2 = travelDist *sinAngle; 

     ccDrawLine(ccp(p.x, p.y), ccp(p.x + newDist, p.y + newDist2)); 

     p = CGPointMake(p.x + newDist, p.y + newDist2); 

    } 



} 

我已經閱讀了幾個網站上關於箭頭曲線以及他們必須遵循的規則。看起來我應該做正確的事情,但事實並非如此。我得到了代表謝爾賓斯基三角形的東西,但沒有合適的箭頭曲線。

enter image description here

您可能沒有知道的Objective-C/cocos2d的回答這個問題,因爲我可能只是做一些後勤不正確。

回答

0

我需要根據當前字符串創建一個新的臨時字符串,並在同一時間經歷一個字符,使字符串的一個臨時在每次迭代的結尾:

NSMutableString *s1 = [[NSMutableString alloc] init]; 

[s1 setString:@"A"]; 

NSMutableString *sTemp = [[NSMutableString alloc] init]; 

[sTemp setString:@""]; 


for(int i=0; i<6; ++i){ 

    for(int j = 0; j < [s1 length]; j++){ 


     unichar character = [s1 characterAtIndex:j]; 

     if(character == 'A'){ 

      [sTemp appendString:@"B-A-B"]; 

     } 
     else if(character == 'B'){ 

      [sTemp appendString:@"A+B+A"]; 

     }else{ 

      [sTemp appendString:[NSString stringWithFormat:@"%C",character]]; 

     } 

    } 

    [s1 setString:sTemp]; 

    [sTemp setString:@""]; 

}