Jump to content
  • Advertisement
Sign in to follow this  
Silarr

Array Issue

This topic is 2753 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm having trouble figuring out how to manage my array of objects to "fire" independantly of one-another without all moving at the same time ontop of eachother :/.

The issue isn't setting up the array, nor getting (all) objects to move on keypress, but I'm trying to figure out how to manage the array so that when I press the key only 1 at a time moves (like bullets).


struct Laser
{

float xLaserPos;
float yLaserPos;
//bool Collide;
//bool visible;


};Laser *LaserArray=NULL;

bool FireLaser=false;
bool CannotFire=false;
NumLasers=50;


LaserArray = new Laser[NumLasers];

for (int i=0; i<NumLasers;i ++){

LaserArray.xLaserPos = 0;
LaserArray.yLaserPos = 0;
//LaserArray.visible = false;
//LaserArray.Collide = false;

}




// Render Logic //

if (FireLaser == true){

// -1 Everytime we fire is true from laser array value
int i;
i = NumLasers;
i-=1;

// Render Laser Sprite
Laser->Sprite(LaserArray.xPos,LaserArray.xLaserPos,LaserArray.yLaserPos);

// Move
LaserArray.xLaserPos +=10;

// OutOfLaser
if(i<=0){
CannotFire=true;
}

}



if((SPACE_PRESSED)&&(CannotFire=false)){

FireLaser=true;


}






i++ in the code wont display for some reason.



I know I'm rendering all the lasers at once, but I require some guidance on how to render 1 at a time each time the fire laser is true.

Share this post


Link to post
Share on other sites
Advertisement
Ok some pseudo code :





function fireLaser()
{
if(fireDelay<=0)
{
laser= new Laser(x,y)
laserArray.push(laser);
fireDelay = 1000;
}

}

function updateLasers(elapsedTime)
{
if(fireDelay>0)
{
fireDelay -= elapsedTime;
if(fireDelay<0)
fireDelay =0;
}

for(laser in laserArray)
laser.update(elapsedTime)

}

function checkInput()
{

if (keys['space'])
fireLaser();
}

function update()
{
elapsedTime = getElapsedTimer();
updateLasers(elapsedTime);
}





What's going on is when you fire a laser you set a timer and if that timer hasn't run out yet you can't fire new lasers. The above will cause a 1000 ms delay between lasers if elapsedTime is in milliseconds. Since lasers will be created with 1000ms intervals and they will be updated they will not be rendered at the same position.

Hope that helps.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!