Hi everyone,
How can I execute code if a key has been pressed inside my Player class' update method?
The issue is that I'm currently using window.GetInput().IsKeyDown(sf::Key::
whatever) for the player's movement and jumping but I need only to get the keyPressed when the player fires (so he doesn't spam bullets as long as the space bar is down).
I've tried adding an Event to the method and polling it but it doesn't respond to anything. Please have a look at this simplified code:
Main.cpp#include <SFML/Graphics.hpp>
#include <iostream>
#include "Level.h"
int main()
{
sf::RenderWindow window(sf::VideoMode(500, 300, 32), "SFML KeyPressed");
window.UseVerticalSync(true);
Level level;
level.Initialize();
level.LoadContent();
while(window.IsOpened())
{
sf::Event Event;
while(window.GetEvent(Event))
{
if(Event.Type == sf::Event::Closed)
window.Close();
}
level.Update(window);
window.Clear();
level.Draw(window);
window.Display();
}
return 0;
}
I won't include the Level class. It basically creates a Player object and calls the player's init, load, update, draw methods in the same way main.cpp does with level.
Player.cpp
// ...
void Player::Update(sf::RenderWindow &window)
{
// Check for movement
if(window.GetInput().IsKeyDown(sf::Key::Left))
movement = -1.0f;
else if(window.GetInput().IsKeyDown(sf::Key::Right))
movement = 1.0f;
// Check for shooting - this is where I only need the key to fire once...
sf::Event Event;
while(window.GetEvent(Event))
{
if(Event.KeyPressed == sf::Key::Space)
Shoot();
}
// ...
}
// ...