Подтвердить что ты не робот

Как нарисовать линию с Cocos2d-iPhone

Я пытаюсь справиться с Cocos2d, пытаясь выполнить простые вещи. На данный момент у меня есть сцена, эта сцена имеет фоновый спрайт и слой. Я пытаюсь нарисовать слой с помощью drawLine. Вот моя текущая попытка.

@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

Что порождает ошибку "значение void, которое не игнорируется, как должно быть". Поэтому, очевидно, я делаю это неправильно, но, надеюсь, вы можете видеть мои рассуждения.

Я также пробовал это

-(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;
}

Что не дает мне ошибку, но она не работает. Я понимаю, что я не понимаю что-то фундаментальное, но может ли кто-нибудь направить меня в правильном направлении?

4b9b3361

Ответ 1

Из 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) );

  // ...
}

Ответ 2

Хорошо, я понял это для всех, кто заинтересован. Вот код с комментарием, объясняющим, что делать.

@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

Итак, я предполагаю, что метод draw вызывается в каждом кадре.

Ответ 3

Вы также можете использовать класс CCRibbon для рисования линии с вашей текстурой. Вот пример:

Сначала вы создаете CCRibbon с параметрами ширины, изображения, длины, цвета и затухания.

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

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

Затем мы добавляем его как дочерний:

[self addChild:ribbon z:8];

Если вы запустите приложение сейчас, вы ничего не увидите, потому что вы еще не добавили какие-либо очки в CCRibbon, поэтому добавьте 2 балла

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

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

Вы не можете удалить отдельные точки, но вы можете удалить CCRibbon из его родительского

[self removeChild:ribbon cleanup:YES];

Исходный код: http://www.ccsprite.com/cocos2d/using-ccribbon-example.html