Bonjour,
Je commence à programmer un jeu 2d, et j'ai un problème pour le déplacement d'un sf::Sprite, mais uniquement quand que reste appuyé sur une même touche, le déplacement saccade, tout va bien au début pourtant, comment faire pour contrer cette erreur de programmation ?
Au cas où, mon main() et mes méthodes de déplacement:
#include <iostream>
#include <SFML/Graphics.hpp>
#include "Config.h"
#include "Defines.h"
#include "Contrôles.h"
#include "Player.h"
using namespace sf;
int main() {
Config config("config.cfg");
ContextSettings settings;
settings.antialiasingLevel = 32;
RenderWindow window(VideoMode(WIN_HEIGHT, WIN_WIDTH, COLOR_DEPTH), config.getWindowName(), Style::Titlebar | Style::Close, settings);
window.setVerticalSyncEnabled(true);
Player heros;
Control controles;
Texture texture;
if( !texture.loadFromFile("res/32x32_Sheet.png", IntRect(0, 0, 32, 32)) )
std::cout << "Texture non trouvee";
heros.setTexture(texture);
Vector2i position;
// Main Loop ==========================
while( window.isOpen() ) {
Event event;
controles.refreshKeyboard();
controles.playerMove(heros);
// EVENTS:
window.pollEvent(event);
if( event.type == event.Closed || Keyboard::isKeyPressed(Keyboard::Escape) )
window.close();
// REMPLISSAGE:
window.clear(Color(0, 0, 0));
// DESSIN:
window.draw(heros.getSprite());
// AFFICHAGE:
window.display();
}
return EXIT_SUCCESS;
}
Et mes méthodes de déplacement:
#include <iostream>
#include <SFML/Graphics.hpp>
#include "Config.h"
#include "Defines.h"
#include "Player.h"
Player::Player() {
m_speed = SPEEDBASE;
}
Player::Player(const sf::Texture& texture) {
m_sprite.setTexture(texture);
}
Player::Player(const sf::Texture& texture, int speed) {
m_sprite.setTexture(texture);
m_speed = speed;
}
Player::~Player() {
}
void Player::setSpeed(int newSpeed) {
m_speed = newSpeed;
}
void Player::setTexture(const sf::Texture& texture) {
m_sprite.setTexture(texture);
}
// MOUVEMENTS
void Player::moveRight() {
m_sprite.move(sf::Vector2f(m_speed, 0));
}
void Player::moveLeft() {
m_sprite.move(sf::Vector2f(-m_speed, 0));
}
void Player::moveUp() {
m_sprite.move(sf::Vector2f(0, -m_speed));
}
void Player::moveDown() {
m_sprite.move(sf::Vector2f(0, m_speed));
}
sf::Sprite Player::getSprite() {
return m_sprite;
}
Afficher la suite