Cocos2d изменить место назначения спрайта - PullRequest
0 голосов
/ 02 ноября 2011

Хорошо, поехали.У меня есть приложение cocos2d, и есть цели, которые двигаются к игроку.Когда игрок движется, я бы хотел, чтобы он снова медленно изменил свое направление к игроку, чтобы они не просто двигались в пустое пространство.Можно ли изменить назначение действия спрайта mid-run?

edit:

Это код в - (void) changeTargetDest

- (void)changeTargetDest {
    NSMutableArray* deleteArray = [[NSMutableArray alloc] init];
    for(CCSprite* s in _targets) {
        float offX = s.position.x - player.position.x;
        float offY = s.position.y - player.position.y;
        float adjustX;
        float adjustY;
        float offDistance = sqrt(powf(offX, 2.0f) + powf(offY, 2.0f));

        if(offDistance < 15) {
            [deleteArray addObject:s];

            deaths++;
            [deathLabel setString:[NSString stringWithFormat:@"Deaths: %ld", deaths]];
            if(deaths == 0)
            [kdLabel setString:[NSString stringWithFormat:@"K/D ratio: %ld.00", score]];
            else
                [kdLabel setString:[NSString stringWithFormat:@"K/D ratio: %.2f", ((float)score / (float)deaths)]];
        }

        else {
            adjustX = offX * .99;
            adjustY = offY * .99;

            CGPoint point = CGPointMake(player.position.x + adjustX, player.position.y + adjustY);

            [s setPosition:point];
        }//else

    }//for

    for (CCSprite *target in deleteArray) {

        [_targets removeObject:target];
        [self removeChild:target cleanup:YES];                                  
    }
}

Это работает хорошо, за исключением одной проблемы.Поскольку новая позиция рассчитывается просто путем взятия 0,99 от предыдущего смещения, чем ближе цель подходит к игроку, тем медленнее она движется.Как я могу сделать его скорость постоянной?

1 Ответ

1 голос
/ 02 ноября 2011

Вы можете остановить действие и запускать новое действие каждые несколько кадров запланированным способом.но лучший способ - это вычислить положение целей в соответствии с положением игроков и использовать setPosition для ручного изменения их позиций в каждом кадре в вашем методе обновления.

...