双重火灾和定位问题

时间:2011-07-10 22:03:57

标签: actionscript-3

我正在研究太空射击游戏并遇到这个问题:

我的太空船发射子弹。子弹以船为中心。目前所有的子弹都是单发。

现在我想拥有的是这艘船的双重火力。基本上这意味着我必须将镜头加倍并将它们放在左右两侧 船的一侧,对吧?但我不知道该怎么做。

我遇到的另一个问题是当我改变子弹的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 个答案:

答案 0 :(得分:1)

autoShoot函数每次调用时仅触发一个射弹。每次调用只有一个tempProjectile可以推送到projectiles列表。

因此,一个修复可以是添加tempProjectile2(在同一个地方tempProjectile已定义)作为可以使用的变量。现在,在每次召唤中,射弹池都会耗尽2,只要弹出足够数量的射弹

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没有被绑定到程序的其他地方。