# Problem with shooting bullets in both directions (Platformer)

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

## Recommended Posts

I have a question about shooting bullets on to the left side of the screen. I tried implementing a bullet class and the bullets would always change direction mid air depending on which direction the player was going. For example: if i were to shoot to the right the bullets would move to the right until i move the player to the left in which case all the bullet arrays start moving left. Is there a? way to make all of my bullets keep going a certain direction? I know there's an easy way to do this and it's just going above my head. Thanks in advance. Here is my Bullet class..

#include "Bullet.h"

Bullet::Bullet(void)
{
}

Bullet::~Bullet(void)
{
}

void Bullet::Init()
{
bulletSpeed = 10;
canShoot = 1;
counter = 1;
}

void Bullet::Shoot(BITMAP *buffer, Player player)
{
if(key[KEY_SPACE] && canShoot == 1)
{
for(int i = counter; i < maxBullets; ++i)
{
bulletX[i] = player.getX();
bulletY[i] = player.getY();
}

++counter;
canShoot = 0;
}

if(!key[KEY_SPACE])
{
if(canShoot == 0)
{
canShoot = 1;
}
}

for(int i = 1; i <= counter; ++i)
{
if(player.getHDir() == 1) // '1' means the player is facing to the right
{
bulletX[i] += bulletSpeed;
}
else
{
bulletX[i] -= bulletSpeed;
}
circlefill(buffer, bulletX[i], bulletY[i], 5, makecol(15, 50, 255));
}
}

##### Share on other sites

for(int i = 1; i <= counter; ++i)
{
if(player.getHDir() == 1) // '1' means the player is facing to the right
{
bulletX[i] += bulletSpeed;
}
else
{
bulletX[i] -= bulletSpeed;
}
circlefill(buffer, bulletX[i], bulletY[i], 5, makecol(15, 50, 255));
}
}

You base the bullet's direction on the player's facing.  Turn bullet into a struct or class with the properties X, Y, and direction (or create yet another array for the bullet direction, though this is clunky).  When you shoot a bullet, copy the player's direction to the bullet's.  Then when you update bullet positions, use the bullet's own direction.

A cleaner way of doing this would to instead give each bullet a position and velocity vector (speed + direction) when fired.  Then there's no need for an if statement at all and bullets could travel in any direction.  Simply add the velocity vector (* elapsed time) to the bullet's position vector during each loop.