Cocos2d iphone 用文字绘制箭头曲线(Objective-c cocos2D)

Cocos2d iphone 用文字绘制箭头曲线(Objective-c cocos2D),cocos2d-iphone,curve,words,fractals,Cocos2d Iphone,Curve,Words,Fractals,我试图用斐波那契式的文字画一条箭头曲线。以后我可能会使用方法调用,而不是构建字符串,但现在我想保留字符串 // 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 iterat

我试图用斐波那契式的文字画一条箭头曲线。以后我可能会使用方法调用,而不是构建字符串,但现在我想保留字符串

// 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);

    }



}
我在几个网站上读到了箭头曲线,以及它们必须遵循的规则。看起来我应该做正确的事情,但结果并不完全正确。我得到了一些表示Sierpinski三角形的东西,但不是一条正确的箭头曲线


您可能不必知道Objective-c/Cocos2d来回答这个问题,因为我可能只是做了一些逻辑上不正确的事情

我需要在当前字符串的基础上创建一个新的临时字符串,一次遍历一个字符,并在每次迭代结束时将该字符串设置为临时字符串:

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:@""];

}