如何在cocos2d中使用openGL线条图

时间:2012-06-18 11:46:31

标签: cocos2d-iphone line draw

我喜欢画一条线,但cocos2d里面有ccDrawLine serrate,如何画出一条模糊的线,谁能帮帮我?

ccDrawLine( ccp(StartP.x, StartP.y), ccp(EndP.x, EndP.y) );

2 个答案:

答案 0 :(得分:1)

我没有使用ccDrawLine,但是我创建了一个带有Sprite的行,并为其设置了动画(请参阅下面的代码)。通过这种方式,我能够使用自定义的线条图像(但是我从来没有做过。)

如果你想坚持使用原语,我想你应该设置行原语的不透明度(参见this帖子解释了如何)然后你可以创建一系列动作设置不透明度级别(例如从不透明度开始,然后是75%,然后回到100%,就像我对我的图像一样,但使用上面链接中的方法)来获得模糊效果..

使用图片的代码:

CCSprite * string = [self getChildByTag:tag];
[string setOpacity:100]; 
NSMutableArray* frames = [[NSMutableArray alloc]initWithCapacity:3];
NSString*lineFrame = [NSString stringWithString:@"line0.png"];            

CCSpriteFrame* frame = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:lineFrame];
[frames addObject:frame];

lineFrame = [NSString stringWithString:@"line1.png"];
frame = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:lineFrame];
[frames addObject:frame];

lineFrame = [NSString stringWithString:@"line0.png"];
frame = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:lineFrame];
[frames addObject:frame];


CCAnimation* anim = [CCAnimation animationWithFrames:frames delay:0.1f];
CCAnimate* animate = [CCAnimate actionWithAnimation:anim];
//CCRepeatForever* repeat = [CCRepeatForever actionWithAction:animate];
[string runAction:animate];

[string setOpacity:75];

希望这会有所帮助..

答案 1 :(得分:0)

#import "cocos2d.h"

@interface CClineSprite : CCLayer
{
    CCRenderTexture * renderTarget;
    NSMutableArray  * pathArray;
    CCSprite        * pathBrush;
    CGPoint           prePosition;
}

-(void)setLinePosition:(CGPoint)position;

-(void)setLineOpacity:(GLubyte) anOpacity;

-(void)setLineScale:(float) scale;

-(void)setLineColor:(ccColor3B) color;

@end








#import "CClineSprite.h"

@implementation CClineSprite

- (id) init
{
    self = [super init];

    if (self)
    {
        CGSize s = [[CCDirector sharedDirector] winSize];
        renderTarget = [CCRenderTexture renderTextureWithWidth:s.width height:s.height];
        [renderTarget setPosition:ccp(s.width/2, s.height/2)];
        [self addChild:renderTarget z:1];
        pathBrush = [CCSprite spriteWithFile:@"dots.png"];
        pathBrush.color = ccWHITE;
        [pathBrush setOpacity:100];
        [pathBrush setScale:0.5];
        pathArray = [[NSMutableArray alloc]init];
    }
    return self;
}

-(void)setLineOpacity:(GLubyte) anOpacity
{
    [pathBrush setOpacity:anOpacity];
}

-(void)setLineScale:(float) scale
{
    [pathBrush setScale:scale];
}

-(void)setLineColor:(ccColor3B) color
{
    [pathBrush setColor:color];
}

-(void)setLinePosition:(CGPoint)position
{
    [pathArray addObject:[NSValue valueWithCGPoint:position]];
    [self renderPath];
}

- (void) renderPath
{
    [renderTarget clear:0 g:0 b:0 a:0];
    [renderTarget begin];

    for (int i = 0; i < pathArray.count-1;i++)
    {
        CGPoint pt1;
        CGPoint pt2;

        [[pathArray objectAtIndex:i] getValue: &pt1];
        [[pathArray objectAtIndex:i + 1] getValue: &pt2];

        float distance = ccpDistance(pt1, pt2);

        if (distance > 1)
        {
            int d = (int)distance;
            for (int i = 0; i < d; i += 10)
            {
                float difx = pt2.x - pt1.x;
                float dify = pt2.y - pt1.y;
                float delta = (float)i / distance;

                [pathBrush setPosition:ccp(pt1.x + (difx * delta), pt1.y + (dify * delta))];
                [pathBrush visit];
            }
        }
    }
    [renderTarget end];
}

@end

用法:

CClineSprite* streak = [CClineSprite node];
[self addChild:streak z:999];
[streak setLinePosition:associatedTurtleObject.position];
[streak setLineScale:0.4];

要动态更新或扩展该行,只需使用

[streak setLinePosition:ccp(x,y)];

希望这会为您提供更多的使用灵活性