Двойной огонь и проблемы с позиционированием - PullRequest
0 голосов
/ 11 июля 2011

Я работаю над космическим шутером, и у меня возникла эта проблема:

Мой космический корабль стреляет пулями.Пули расположены по центру относительно корабля.В настоящее время все пули - одиночные выстрелы.

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

Другая проблема, с которой я столкнулся, заключается в том, что когда я изменяю координаты x и y пули, чтобы переместить пули из центра корабля ввлево (или вправо) и вращение корабля и стрельбы я получаю странное поведение от пуль.В этом случае они перемещаются слева в центр и наоборот, обращаясь к кораблю (при вращении и стрельбе).

Пожалуйста - кто-нибудь знает, где могут быть проблемы и как это сделать?Я очень ценю любую помощь.TIA!:)

private function autoShoot(step:Number):void {  

    projectileManager.projectilePoolCount = projectileManager.projectilePool.length - 1;
    asteroidManager.asteroidCount = asteroidManager.asteroids.length;

        if (projectileManager.lastProjectileShot > projectileOffset && projectileManager.projectilePoolCount > 0 &&
        playerStarted && asteroidManager.asteroidCount > 0 && projNumber < projectileNumber)
    {

    dispatchEvent(new CustomEventSound(CustomEventSound.PLAY_SOUND, Main.SOUND_PLAYER_SHOOT,
            false, 0, 8, 1));
    tempProjectile = projectileManager.projectilePool.pop();
    tempProjectile.projectileDelayCount = 0;

    var projectileRadians:Number = (player.frame / 360) * 6.28;

    projShots++;
    projNumber++;

    if (projNumber >= projectileNumber)
    {
        player.startDelay = true;
    }   

    tempProjectile.x = (player.point.x) + Math.cos(projectileRadians);
    tempProjectile.y = (player.point.y) + Math.sin(projectileRadians);

    tempProjectile.x = player.x + 13;
    tempProjectile.y = player.y + 13;

    tempProjectile.nextX = tempProjectile.x;
    tempProjectile.nextY = tempProjectile.y;

    tempProjectile.dx = rotationVectorList[player.frame].x;
    tempProjectile.dy = rotationVectorList[player.frame].y;

    tempProjectile.speed = projectileSpeed;
    tempProjectile.frame = 0;

    tempProjectile.bitmapData = tempProjectile.animationList[0];

    tempProjectile.projectileDelay = 10;

    projectileManager.projectiles.push(tempProjectile);
    projectileManager.lastProjectileShot = 0;   

    } else {


    projectileManager.lastProjectileShot += step;

    }
}

1 Ответ

1 голос
/ 11 июля 2011

Функция autoShoot запускает только один снаряд при каждом вызове.Существует только один tempProjectile на вызов для отправки в список * 1003. *.

. Таким образом, одним исправлением может быть добавление tempProjectile2 (в том же месте, где определено tempProjectile) в качестве переменной, котораяможет быть использован.Теперь в каждом вызове пул снарядов истощается на два, пока достаточное количество снарядов выталкивается

tempProjectile = projectileManager.projectilePool.pop();
tempProjectile2 = projectileManager.projectilePool.pop();

, затем корректируют смещение соответственно

tempProjectile.x
tempProjectile.y 
tempProjectile2.x
tempProjectile2.y

И так далее с остальнымикода.Единственное, что мне неясно, это то, почему tempProjectile.x и y назначаются дважды.

tempProjectile.x = (player.point.x) + Math.cos(projectileRadians);
tempProjectile.y = (player.point.y) + Math.sin(projectileRadians);

tempProjectile.x = player.x + 13;
tempProjectile.y = player.y + 13;

, я думаю, будет использоваться только вторая пара.

Надеемся, что остальные функциине должны меняться, потому что в конце снаряды помещаются в список projectiles

 projectileManager.projectiles.push(tempProjectile);
 projectileManager.projectiles.push(tempProjectile2);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...