Jump to content

  • Log In with Google      Sign In   
  • Create Account

Problem with shooting bullets in both directions (Platformer)


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 coderNull   Members   -  Reputation: 103

Like
0Likes
Like

Posted 03 July 2013 - 07:29 PM

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));
}
}


Sponsor:

#2 amrazek111   Members   -  Reputation: 695

Like
2Likes
Like

Posted 03 July 2013 - 09:17 PM



 

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.



#3 crazy_crab   Members   -  Reputation: 183

Like
0Likes
Like

Posted 04 July 2013 - 05:18 AM

or you could use bezier or catmull curves for smooth translation.






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS