Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to draw a line with Cocos2d-iPhone

I'm trying to get to grips with Cocos2d by trying to accomplish simple things. At this point, I have a scene, that scene has a background sprite, and a Layer. I'm trying to draw onto the Layer using drawLine. Here's my current attempt.

@implementation MyLayer
-(id)init{
    self = [super init];
    if(self != nil){
        glColor4f(0.8, 1.0, 0.76, 1.0);  
        glLineWidth(2.0f);
        CocosNode *line = drawLine(10.0f, 100.0f,400.0f,27.0f);
        [self addChild:line z:1];
    }
    return self;
}
@end

Which generates the error "void value not ignored as it ought to be". So obviously I'm doing it wrong, but hopefully you can see my reasoning.

I've also tried this

-(id)init{
    self = [super init];
    if(self != nil){
        glColor4f(0.8, 1.0, 0.76, 1.0);  
        glLineWidth(2.0f);
        drawLine(10.0f, 100.0f,400.0f,27.0f);
    }
    return self;
}

Which doesn't give me an error, but it doesn't work either. I realise I'm not understanding something fundamental, but can anyone steer me in the right direction?

like image 962
gargantuan Avatar asked Mar 27 '09 22:03

gargantuan


3 Answers

From the cocos2d drawPrimitivesTest.m:

- (void)draw {
  // ...

  // draw a simple line
  // The default state is:
  // Line Width: 1
  // color: 255,255,255,255 (white, non-transparent)
  // Anti-Aliased
  glEnable(GL_LINE_SMOOTH);
  ccDrawLine( ccp(0, 0), ccp(s.width, s.height) );

  // ...
}
like image 138
Travis Avatar answered Nov 07 '22 17:11

Travis


Ok, I figured it out for anyone who is interested. Here's the code with the comment explaining what to do.

@implementation GameLayer
-(id)init{
    self = [super init];
    if(self != nil){
        // init stuff here      
    }
    return self;
}

// You have to over-ride this method
-(void)draw{
    glColor4f(0.8, 1.0, 0.76, 1.0);  
    glLineWidth(2.0f);
    drawLine(10,100,50,79);
}    
@end

So I assume, the draw method gets called at every frame.

like image 14
gargantuan Avatar answered Nov 07 '22 15:11

gargantuan


You can also use CCRibbon class to draw line with your texture. Here is an example:

First you create CCRibbon with width , image , length , color and fade parameters

ccColor4B myColor = ccc4(255, 255, 255, 150);

CCRibbon *ribbon = [CCRibbon ribbonWithWidth:10 image:@"green.png" length:10.0 color:myColor fade:0.7f];

Then we add it as a child:

[self addChild:ribbon z:8];

If you run the application now you will not see anything because you didn’t add any points yet to the CCRibbon so lets add 2 points

[ribbon addPointAt:ccp(10,10) width:10];

[ribbon addPointAt:ccp(15,15) width:10];

You cannot remove individual points but you can remove the CCRibbon from its parent

[self removeChild:ribbon cleanup:YES];

Source code from: http://www.ccsprite.com/cocos2d/using-ccribbon-example.html

like image 8
huyleit Avatar answered Nov 07 '22 16:11

huyleit