Движение пули Cocos2d

На данный момент у меня есть пуля (спрайт), использующая CCAction moveTo the player position. Я настроил так, чтобы пуля всегда летела с постоянной скоростью, используя t = d/v. Но мне нужна помощь, чтобы пуля прошла через заданную точку и продолжала лететь определенное расстояние.

CCSprite * bullet = [CCSprite spriteWithFile:@"Projectile.png"];
    int gunRange = 300;
    int velocity = 300;
    int  t = distanceFromPlayer/velocity;
    CCAction *shoot = [CCMoveTo actionWithDuration:t
                                          position:player.position];
    bullet.position = enemy.position;
    if (distanceFromPlayer <= gunRange) {
        [self addChild:bullet];
        [bullet runAction:shoot];
    }

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


person stenger96    schedule 14.07.2012    source источник
comment
Возможно, вы захотите переместить создание действия, когда вы его фактически используете. В противном случае вы расточительно создаете и выпускаете никогда не использовавшееся действие.   -  person LearnCocos2D    schedule 15.07.2012


Ответы (1)


Эта строка не имеет для меня смысла:

bullet.position = enemy.position;

Используйте MoveTo, чтобы переместить пулю в позицию врага, а не выше линии.

Кроме того, чтобы переместить пулю мимо врага в определенную позицию, просто используйте старую школьную тригонометрию, которую мы все выучили — SOH CAH TOA для прямоугольных треугольников. У вас есть угол пули и расстояние до врага, поэтому, используя информацию и триггер прямоугольного треугольника, вы можете заставить пулю пройти мимо цели на определенное расстояние.

Надеюсь это поможет!

person user1233894    schedule 14.07.2012
comment
Извините, если мой пост запутал, враг стреляет в игрока. - person stenger96; 15.07.2012
comment
Тригонометрия помогает. Из макушки моей головы: ccpNormalize(ccpSub(sourcePosition, targetPosition)) затем умножьте результат на значение, превышающее длину вектора от источника до цели для превышения. - person LearnCocos2D; 15.07.2012
comment
Все это буквально пронеслось у меня в голове. - person stenger96; 15.07.2012