Skip to main content
gamedev.net
🔒 Locked

Array Issue

Started by Silarr Nov 12, 2010 at 6:04 PM 0 replies 750+ views
Original Post
Silarr
Silarr
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;// OutOfLaserif(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.
Black Knight
Black Knight
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.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.