cocos2d вечный путь роста - PullRequest
       7

cocos2d вечный путь роста

1 голос
/ 06 сентября 2011

В моем приложении мне нужно нарисовать путь, где к каждому купе фреймов добавляется дополнительная точка в конце.

Я мог бы реализовать это следующим образом:

- (void) draw
{
  glEnable(GL_LINE_SMOOTH);
  glColor4f(0.0,0.0,1.0,1.0);

  BOOL first = YES;
  CGPoint prevPoint;

  for (NSValue* v in points)
  {
    CGPoint p = [v CGPointValue];

    if (first == YES)
      first = NO;
    else
      ccDrawLine(prevPoint, p);

      prevPoint = p;
  }
}

Но я боюсь, что это не будет хорошо масштабироваться, поскольку путь может (и почти всегда будет) становиться довольно длинным.
Есть ли лучший, более "экономичный" способ реализовать это?

1 Ответ

1 голос
/ 21 января 2012

Посмотрите на стандартный пример кода cocos2d RenderTextureTest, который включает в себя класс рисования пальцем. Упрощенная версия основного метода, который делает рисунок, показана ниже. Вы можете использовать эту логику и использовать ее для визуализации пути под вашим контролем, а не для событий касания.

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint start = [touch locationInView: [touch view]];   
    start = [[CCDirector sharedDirector] convertToGL: start];
    CGPoint end = [touch previousLocationInView:[touch view]];
    end = [[CCDirector sharedDirector] convertToGL:end];

    // begin drawing to the render texture
    [target begin];

    // for extra points, we'll draw this smoothly from the last position and vary the sprite's
    // scale/rotation/offset
    float distance = ccpDistance(start, end);
    if (distance > 1)
    {
        int d = (int)distance;
        for (int i = 0; i < d; i++)
        {
            float difx = end.x - start.x;
            float dify = end.y - start.y;
            float delta = (float)i / distance;
            [brush setPosition:ccp(start.x + (difx * delta), start.y + (dify * delta))];
            [brush setRotation:rand()%360];
            float r = ((float)(rand()%50)/50.f) + 0.25f;
            [brush setScale:r];
            //[brush setColor:ccc3(CCRANDOM_0_1()*127+128, 255, 255) ];
            // Call visit to draw the brush, don't call draw..
            [brush visit];
        }
    }
    // finish drawing and return context back to the screen
    [target end];   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...