SFML community forums

Help => Window => Topic started by: 0026sd on November 06, 2012, 05:00:43 pm

Title: Handling keyPressed event in player's update method (SFML 1.6)
Post by: 0026sd on November 06, 2012, 05:00:43 pm
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();
    }

    // ...

}

// ...

 
Title: Re: Handling keyPressed event in player's update method (SFML 1.6)
Post by: FRex on November 06, 2012, 05:11:01 pm
Should be
Event.Key.Code
, not
Event.KeyPressed
read the events tutorial. And consider upgrading to 2.0
Title: Re: Handling keyPressed event in player's update method (SFML 1.6)
Post by: 0026sd on November 06, 2012, 05:19:18 pm
Should be
Event.Key.Code
, not
Event.KeyPressed
read the events tutorial. And consider upgrading to 2.0

I have read the tutorials and I'm scared to upgrade to 2.0.. haha. Or lazy.

Anyway, thanks for the suggestion but I actually tried that and it didn't work either. The problem is that the tutorials use the events in cooperation with the RenderWindow initialization whereas I want to use it in a separate class from that.