SFML community forums

Help => System => Topic started by: CptnRoughnight on September 21, 2016, 11:27:11 am

Title: Only 2 keys at the same time
Post by: CptnRoughnight on September 21, 2016, 11:27:11 am
Hi dudes,

I've searched for several days now and did'nt find anything. I'm writing an asteroids-like game (classic and extended version) and I'm stuck at Game Input. My Gameloop follows the instruction from http://www.koonsolo.com/news/dewitters-gameloop/ .

All is working fine, gameloop,interpolation movement. But if I want to fly my ship away from those nasty asteroids and start shooting another the input stucks at two keys. So I can accelerate and rotate, or accelerate and shoot, or rotate and shoot. But not accelerate,rotate and shoot at the same time.

I'm using SFML 2.1(config.hpp) on Linux Mint 17.1. I query the keys by using

if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
           // rotate
}
 

Can someone help me to figure out the problem?

regards
CptnRoughnight
Title: AW: Only 2 keys at the same time
Post by: eXpl0it3r on September 21, 2016, 11:28:26 am
What keys are you using? What's your code?
Title: Re: Only 2 keys at the same time
Post by: CptnRoughnight on September 21, 2016, 11:31:00 am
My bad.. 

here's the code:

 if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
    {
        rotangle += rotspeed;
    }

    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
    {
        rotangle -= rotspeed;
    }

    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
    {
        speed += acc;

        if (speed>maxspeed)
            speed=maxspeed;

             // when the user wants to move forward:
        radangle = rotangle * M_PI / 180;

        vel_x += cos( radangle ) * acc * 1.0f;
        vel_y -= sin( radangle ) * acc * 1.0f;

        totalvelocity = sqrt( (vel_x*vel_x) + (vel_y*vel_y) );

        if( totalvelocity > maxspeed )
        {
            // ship is moving too fast.  Scale the velocity down
            vel_x *= maxspeed / totalvelocity;
            vel_y *= maxspeed / totalvelocity;
        }
    }

    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
    {
        vel_x *= brake;
        vel_y *= brake;
    }

    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
    {
        // bullets abfeuern
        if (starttime+wpDelay < GetTicks())
        {
            starttime = GetTicks();
            Bullet *dummy = new Bullet(this->posx,this->posy,this->vel_x,this->vel_y,this->rotangle);
            bullets->push_back(*dummy);
            delete dummy;
        }
    }
Title: Re: Only 2 keys at the same time
Post by: Laurent on September 21, 2016, 11:50:35 am
This is most likely a hardware issue

https://en.wikipedia.org/wiki/Rollover_(key)#Key_jamming_and_ghosting
Title: Re: Only 2 keys at the same time
Post by: CptnRoughnight on September 21, 2016, 11:55:43 am
 ???

wow... i changed to LControl for shooting and all is working...

thank you very much. I didn't thought of that at all.