2014-11-06 3 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:@""]; 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^