Fire Rate Issue in Java 2D Gaming
up vote
1
down vote
favorite
I am creating a 2D tank game and I want my tank to be able to shoot immediately once the fire button is pressed and then again every half second, while the fire button is held. Currently In my game, my first bullet shoots immediately after the fire button is pressed, then there is a delay (I presume half second) until my tank starts shooting a stream of bullets. I'm wondering why the initial delay after the first bullet works, but the successive ones fail. Below I have included the method which creates bullets which is called every frame in my 144Hz main game loop:
public void addBullets(ArrayList<Animate> animates, ArrayList<Drawable> drawables)
if (this.ShootPressed) (System.currentTimeMillis() - timeSinceLastShot) >= 500)
Bullet newBullet = this.addBullet();
animates.add(newBullet);
drawables.add(newBullet);
firstShot = false;
timeSinceLastShot = System.currentTimeMillis();
Here are the associated methods in my KeyListener class:
public void keyPressed(KeyEvent key) {
int keyPressed = key.getKeyCode();
if (keyPressed == up)
this.t1.toggleUpPressed();
if (keyPressed == down)
this.t1.toggleDownPressed();
if (keyPressed == left)
this.t1.toggleLeftPressed();
if (keyPressed == right)
this.t1.toggleRightPressed();
if(keyPressed == shoot)
this.t1.toggleShootPressed();
this.t1.setFirstShot(true);
I am including this for additional information even though the bug happens before the key is released:
public void keyReleased(KeyEvent ke)
int keyReleased = ke.getKeyCode();
if (keyReleased == up)
this.t1.unToggleUpPressed();
if (keyReleased == down)
this.t1.unToggleDownPressed();
if (keyReleased == left)
this.t1.unToggleLeftPressed();
if (keyReleased == right)
this.t1.unToggleRightPressed();
if (keyReleased == shoot)
this.t1.unToggleShootPressed();
java 2d-games
New contributor
add a comment |
up vote
1
down vote
favorite
I am creating a 2D tank game and I want my tank to be able to shoot immediately once the fire button is pressed and then again every half second, while the fire button is held. Currently In my game, my first bullet shoots immediately after the fire button is pressed, then there is a delay (I presume half second) until my tank starts shooting a stream of bullets. I'm wondering why the initial delay after the first bullet works, but the successive ones fail. Below I have included the method which creates bullets which is called every frame in my 144Hz main game loop:
public void addBullets(ArrayList<Animate> animates, ArrayList<Drawable> drawables)
if (this.ShootPressed) (System.currentTimeMillis() - timeSinceLastShot) >= 500)
Bullet newBullet = this.addBullet();
animates.add(newBullet);
drawables.add(newBullet);
firstShot = false;
timeSinceLastShot = System.currentTimeMillis();
Here are the associated methods in my KeyListener class:
public void keyPressed(KeyEvent key) {
int keyPressed = key.getKeyCode();
if (keyPressed == up)
this.t1.toggleUpPressed();
if (keyPressed == down)
this.t1.toggleDownPressed();
if (keyPressed == left)
this.t1.toggleLeftPressed();
if (keyPressed == right)
this.t1.toggleRightPressed();
if(keyPressed == shoot)
this.t1.toggleShootPressed();
this.t1.setFirstShot(true);
I am including this for additional information even though the bug happens before the key is released:
public void keyReleased(KeyEvent ke)
int keyReleased = ke.getKeyCode();
if (keyReleased == up)
this.t1.unToggleUpPressed();
if (keyReleased == down)
this.t1.unToggleDownPressed();
if (keyReleased == left)
this.t1.unToggleLeftPressed();
if (keyReleased == right)
this.t1.unToggleRightPressed();
if (keyReleased == shoot)
this.t1.unToggleShootPressed();
java 2d-games
New contributor
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I am creating a 2D tank game and I want my tank to be able to shoot immediately once the fire button is pressed and then again every half second, while the fire button is held. Currently In my game, my first bullet shoots immediately after the fire button is pressed, then there is a delay (I presume half second) until my tank starts shooting a stream of bullets. I'm wondering why the initial delay after the first bullet works, but the successive ones fail. Below I have included the method which creates bullets which is called every frame in my 144Hz main game loop:
public void addBullets(ArrayList<Animate> animates, ArrayList<Drawable> drawables)
if (this.ShootPressed) (System.currentTimeMillis() - timeSinceLastShot) >= 500)
Bullet newBullet = this.addBullet();
animates.add(newBullet);
drawables.add(newBullet);
firstShot = false;
timeSinceLastShot = System.currentTimeMillis();
Here are the associated methods in my KeyListener class:
public void keyPressed(KeyEvent key) {
int keyPressed = key.getKeyCode();
if (keyPressed == up)
this.t1.toggleUpPressed();
if (keyPressed == down)
this.t1.toggleDownPressed();
if (keyPressed == left)
this.t1.toggleLeftPressed();
if (keyPressed == right)
this.t1.toggleRightPressed();
if(keyPressed == shoot)
this.t1.toggleShootPressed();
this.t1.setFirstShot(true);
I am including this for additional information even though the bug happens before the key is released:
public void keyReleased(KeyEvent ke)
int keyReleased = ke.getKeyCode();
if (keyReleased == up)
this.t1.unToggleUpPressed();
if (keyReleased == down)
this.t1.unToggleDownPressed();
if (keyReleased == left)
this.t1.unToggleLeftPressed();
if (keyReleased == right)
this.t1.unToggleRightPressed();
if (keyReleased == shoot)
this.t1.unToggleShootPressed();
java 2d-games
New contributor
I am creating a 2D tank game and I want my tank to be able to shoot immediately once the fire button is pressed and then again every half second, while the fire button is held. Currently In my game, my first bullet shoots immediately after the fire button is pressed, then there is a delay (I presume half second) until my tank starts shooting a stream of bullets. I'm wondering why the initial delay after the first bullet works, but the successive ones fail. Below I have included the method which creates bullets which is called every frame in my 144Hz main game loop:
public void addBullets(ArrayList<Animate> animates, ArrayList<Drawable> drawables)
if (this.ShootPressed) (System.currentTimeMillis() - timeSinceLastShot) >= 500)
Bullet newBullet = this.addBullet();
animates.add(newBullet);
drawables.add(newBullet);
firstShot = false;
timeSinceLastShot = System.currentTimeMillis();
Here are the associated methods in my KeyListener class:
public void keyPressed(KeyEvent key) {
int keyPressed = key.getKeyCode();
if (keyPressed == up)
this.t1.toggleUpPressed();
if (keyPressed == down)
this.t1.toggleDownPressed();
if (keyPressed == left)
this.t1.toggleLeftPressed();
if (keyPressed == right)
this.t1.toggleRightPressed();
if(keyPressed == shoot)
this.t1.toggleShootPressed();
this.t1.setFirstShot(true);
I am including this for additional information even though the bug happens before the key is released:
public void keyReleased(KeyEvent ke)
int keyReleased = ke.getKeyCode();
if (keyReleased == up)
this.t1.unToggleUpPressed();
if (keyReleased == down)
this.t1.unToggleDownPressed();
if (keyReleased == left)
this.t1.unToggleLeftPressed();
if (keyReleased == right)
this.t1.unToggleRightPressed();
if (keyReleased == shoot)
this.t1.unToggleShootPressed();
java 2d-games
java 2d-games
New contributor
New contributor
New contributor
asked yesterday
yungvinsantos
61
61
New contributor
New contributor
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
I suspect it's an issue with key-repeats which will repeatedly call KeyPressed while the key is held. It is usually setup to behave as you describe. Consequently, "firstShot" will be repeatedly set to true and a shot will be fired.
I advise restricting your event code, mainly as it's continuous in nature, to only toggling actions, rather than performing any logic. You can determine whether a shot is first or not in your game loop, with the help of some messages from your events.
However, the firstShot variable is not really necessary at all as the time delta will account for it. Removing it would also prevent firing faster than every 500ms by pressing the fire key rapidly, which you may or may not want.
New contributor
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
I suspect it's an issue with key-repeats which will repeatedly call KeyPressed while the key is held. It is usually setup to behave as you describe. Consequently, "firstShot" will be repeatedly set to true and a shot will be fired.
I advise restricting your event code, mainly as it's continuous in nature, to only toggling actions, rather than performing any logic. You can determine whether a shot is first or not in your game loop, with the help of some messages from your events.
However, the firstShot variable is not really necessary at all as the time delta will account for it. Removing it would also prevent firing faster than every 500ms by pressing the fire key rapidly, which you may or may not want.
New contributor
add a comment |
up vote
0
down vote
I suspect it's an issue with key-repeats which will repeatedly call KeyPressed while the key is held. It is usually setup to behave as you describe. Consequently, "firstShot" will be repeatedly set to true and a shot will be fired.
I advise restricting your event code, mainly as it's continuous in nature, to only toggling actions, rather than performing any logic. You can determine whether a shot is first or not in your game loop, with the help of some messages from your events.
However, the firstShot variable is not really necessary at all as the time delta will account for it. Removing it would also prevent firing faster than every 500ms by pressing the fire key rapidly, which you may or may not want.
New contributor
add a comment |
up vote
0
down vote
up vote
0
down vote
I suspect it's an issue with key-repeats which will repeatedly call KeyPressed while the key is held. It is usually setup to behave as you describe. Consequently, "firstShot" will be repeatedly set to true and a shot will be fired.
I advise restricting your event code, mainly as it's continuous in nature, to only toggling actions, rather than performing any logic. You can determine whether a shot is first or not in your game loop, with the help of some messages from your events.
However, the firstShot variable is not really necessary at all as the time delta will account for it. Removing it would also prevent firing faster than every 500ms by pressing the fire key rapidly, which you may or may not want.
New contributor
I suspect it's an issue with key-repeats which will repeatedly call KeyPressed while the key is held. It is usually setup to behave as you describe. Consequently, "firstShot" will be repeatedly set to true and a shot will be fired.
I advise restricting your event code, mainly as it's continuous in nature, to only toggling actions, rather than performing any logic. You can determine whether a shot is first or not in your game loop, with the help of some messages from your events.
However, the firstShot variable is not really necessary at all as the time delta will account for it. Removing it would also prevent firing faster than every 500ms by pressing the fire key rapidly, which you may or may not want.
New contributor
edited yesterday
New contributor
answered yesterday
Hayden Ness
11
11
New contributor
New contributor
add a comment |
add a comment |
yungvinsantos is a new contributor. Be nice, and check out our Code of Conduct.
yungvinsantos is a new contributor. Be nice, and check out our Code of Conduct.
yungvinsantos is a new contributor. Be nice, and check out our Code of Conduct.
yungvinsantos is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53237825%2ffire-rate-issue-in-java-2d-gaming%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password