开发者

Dual fire and positioning problems

I'm working on a space shooter and have this problem:

My space ship fires bullets. The bullets are centered in reference to the ship. Currently all bullets are single shots.

Now what I'd like to have is dual fire for the ship. Basically that means I have to double the shots and place them at the left and right side of the ship, right? But I don't 开发者_JS百科know how to do it exactly.

The other problem I have is that when I change the x and y-coordinates of the bullet in order to move the bullets from the center of the ship to the left (or right) and rotate the ship and fire I get a strange behavior of the bullets. In this case they move from the left to the center and vice versa referring to the ship (while rotating and firing).

Please - has anyone any idea where the problems might be and how to do it? I appreciate very much any help. 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;

    }
}


The autoShoot function only fires one projectile each time it is called. There is only one tempProjectile per call to push to the projectiles list.

So one fix can be to add a tempProjectile2 (in the same place tempProjectile is defined) as a variable that can be used. Now in each call the projectile pool gets depleted by two, as long an adequate number of projectiles are popped

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

then adjust the offset accordingly

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

And so on with the rest of the code. The only thing I am unclear about is why tempProjectile.x and y are assigned twice.

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;

only the second pair will be used, I think.

Hopefully the rest of the functions should not change because at the end the projectiles are pushed to the projectiles list

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

So the whatever function used to update and render should remain the same, assuming tempProjectile is not tied down elsewhere in the program.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜