SFML community forums

Help => General => Topic started by: Linux Vs God on August 09, 2011, 05:02:36 am

Title: SFML 2.0 Keyrelease help
Post by: Linux Vs God on August 09, 2011, 05:02:36 am
Ok, I am making a Zelda game similar to a Link To The Past. I am trying to make my character animation's image default to 0 whenever i release one of the direction buttons on my keyboard. This works about 85% of the time. Is there something wrong with this code?

Code: [Select]
void Character::Movement()
{
if(sf::Keyboard::IsKeyPressed(sf::Keyboard::Up))
{
currentView = UP;
spriteFrame++;

if(spriteFrame >= 9)
spriteFrame = 0;

for(int i=0; i < spriteFrame; ++i)
LinkSprite.SetImage(linkup[i], false);

LinkSprite.Move(0.f, -speed);
}
else if(sf::Keyboard::IsKeyPressed(sf::Keyboard::Down))
{
currentView = DOWN;
spriteFrame++;

if(spriteFrame >= 9)
spriteFrame = 0;

for(int i=0; i < spriteFrame; ++i)
LinkSprite.SetImage(linkdown[i], false);

LinkSprite.Move(0.f, speed);
}
else if(sf::Keyboard::IsKeyPressed(sf::Keyboard::Right))
{
currentView = RIGHT;
spriteFrame++;

if(spriteFrame >= 9)
spriteFrame = 0;

for(int i=0; i < spriteFrame; ++i)
LinkSprite.SetImage(linkright[i], true);

LinkSprite.Move(speed, 0.f);
}
else if(sf::Keyboard::IsKeyPressed(sf::Keyboard::Left))
{
currentView = LEFT;
spriteFrame++;

if(spriteFrame >= 9)
spriteFrame = 0;

for(int i=0; i < spriteFrame; ++i)
LinkSprite.SetImage(linkleft[i], true);

LinkSprite.Move(-speed, 0.f);
}
}

void Character::KeyRelease()
{
if(sf::Event::KeyReleased && sf::Keyboard::Right && currentView == RIGHT)
LinkSprite.SetImage(linkright[0]);
if(sf::Event::KeyReleased && sf::Keyboard::Left && currentView == LEFT)
LinkSprite.SetImage(linkleft[0]);
if(sf::Event::KeyReleased && sf::Keyboard::Up && currentView == UP)
LinkSprite.SetImage(linkup[0]);
if(sf::Event::KeyReleased && sf::Keyboard::Down && currentView == DOWN)
LinkSprite.SetImage(linkdown[0]);
}
Title: SFML 2.0 Keyrelease help
Post by: Linux Vs God on August 09, 2011, 08:10:33 pm
Anybody got ideas?
Title: SFML 2.0 Keyrelease help
Post by: Laurent on August 09, 2011, 08:30:55 pm
There are many mistakes in your code, maybe you should read carefully the tutorials and documentation.

Code: [Select]
if(sf::Event::KeyReleased && sf::Keyboard::Right && currentView == RIGHT)
Here you are testing a constant expression, sf::Event::KeyReleased and sf::Keyboard::Right are numeric constants, not boolean conditions. It's like you wrote "if (5 && 24 && currentView == RIGHT)".

Code: [Select]
for(int i=0; i < spriteFrame; ++i)
         LinkSprite.SetImage(linkleft[i], true);

You're changing the sprite's image several times, but only the last assignment will be taken into account. I don't know what this code was supposed to do ;)

When is Character::KeyRelease() called? Why don't you just write a final "else" in Character::Movement() to handle the case when no direction key is pressed?
Title: SFML 2.0 Keyrelease help
Post by: Linux Vs God on August 09, 2011, 08:44:33 pm
It works 100% now thanks