Renderizando em cocos2d-x usando valores de uma função matemática

9

Bom dia.

Estou no linux, usando o cocos2d-x para Android .

Eu criei uma função que calcula os valores dos círculos.

        // Circle point updateCircle()
    // x = number of iteration · SamplingPeriod   |-|-|-|
    // y = A · sine ( 2 · PI · number of iteration · SamplingPeriod / Period )
    int iterations = this->getNumberOfIterations();
    CCPoint centerPoint = this->getCenter();
    float x = centerPoint.x + this->getAmplitude() * cos( 2 * M_PI * iterations * this->getSamplingPeriod() * this->getFrequency() );
    float y = centerPoint.y + this->getAmplitude() * sin( 2 * M_PI * iterations * this->getSamplingPeriod() * this->getFrequency() );

    _newPoint = ccp( x, y );

        // Create Array Actions
    CCArray *myActionsArray = new CCArray(3);

    // Set action move
    CCAction *actionMove1 = CCMoveTo::create(this->getSamplingPeriod(), newPoint);                         // Move to next point
        CCAction *actionMove2 = CCCallFuncN::create(this, callfuncN_selector(GameObject::updateCircle));       // call again this function

        // Insert Objects
    myActionsArray->insertObject(actionMove1, 0);
    myActionsArray->insertObject(actionMove2, 1);

    // Create Sequence
    CCAction *action = CCSequence::create(myActionsArray);

        // Set Tags
    action->setTag(kActionMove);

    // Run
    this->runAction(action);

    // Set new call to put new point in SamplingFrequency ms
    iterations += 1;
    static const int maxIterationCycle = 1 / (this->getSamplingPeriod() * this->getFrequency());
    if (iterations >= maxIterationCycle)
    {
        iterations = 1;
    }

    this->setNumberOfIterations(iterations);
    CCLog("texttx Iterations %d/%d", iterations, maxIterationCycle);

Alternativamente, eu tentei:

   
    // Set action move 
    CCAction *actionMove1 = CCCallFuncN::create(this, callfuncN_selector(GameObject::macroSetNewPoint));
    CCAction *actionMove2 = CCDelayTime::create(this->getSamplingPeriod());
    CCAction *actionMove3 = CCCallFuncN::create(this, callfuncN_selector(GameObject::updateCircle));

e

        // Set action move
    CCAction *actionMove1 = CCMoveTo::create(this->getSamplingPeriod(), _newPoint);
    CCAction *actionMove2 = CCDelayTime::create(this->getSamplingPeriod());
    CCAction *actionMove3 = CCCallFuncN::create(this, callfuncN_selector(GameObject::updateCircle));

O problema é que meu objeto de jogo se move em círculos, mas depois de 1000 iterações aproximadamente, ele desaparece e aparece novamente em alguns segundos. Eu não sei o que está acontecendo - Os pontos estão corretamente calculados (acho)

Talvez o moveto precise de mais tempo para executar? Como eu poderia calcular um patrono de matemática para mover meus sprites depois dele?

    
por vgonisanz 22.07.2012 в 08:50
fonte

1 resposta

5

Eu testei seu código e trabalho ok. Por favor, verifique se você está atualizando um ponto de outro callback ou algo assim. Se os dados forem públicos, poderão ser atualizados por outra parte do código.

    
por goe 01.08.2012 / 11:53
fonte