Bonjour à tous,
Je débute avec SFML et malgré les problèmes déjà évoqués par certains sur ce forum ou ailleurs, ils ne me permettent pas de régler mes soucis.
en effet je démarre un petit projet et pour l'instant je me base sur le programme PONG suivant :
https://github.com/SFML/SFML/blob/master/examples/pong/Pong.cppJ'ai donc pour l'instant suivi un peu le même principe pour mon programme dont voici le code :
#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>
#include <cstdlib>
#include <ctime>
// Here is a small helper for you ! Have a look.
// #include "ResourcePath.hpp"
#define gameWidth 800
#define gameHeight 640
#define LARGEUR_TILE 32 /// hauteur et largeur des tiles.
#define HAUTEUR_TILE 32
#define NOMBRE_BLOCS_LARGEUR 25 /// nombre a afficher en x et y
#define NOMBRE_BLOCS_HAUTEUR 20
int table[20][25] = {
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
bool mIsMovingUp;
bool mIsMovingDown;
using namespace sf;
void Afficher(sf::RenderTarget &App, sf::Texture & tileset, int table[20][25],int nombre_blocs_largeur,int nombre_blocs_hauteur)
{
sf::Sprite Rect_source;
Rect_source.setTexture(tileset);
for (int i=0;i<nombre_blocs_largeur;i++)
{
for (int j = 0; j<nombre_blocs_hauteur; j++)
{
// Rect_source.setTextureRect(sf::IntRect(table[j][i] * LARGEUR_TILE, 0, table[i][j] * LARGEUR_TILE + LARGEUR_TILE, HAUTEUR_TILE));
Rect_source.setTextureRect(sf::IntRect((table[j][i]) * LARGEUR_TILE, 0, (table[i][j]) * LARGEUR_TILE + LARGEUR_TILE, HAUTEUR_TILE));
Rect_source.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE);
App.draw(Rect_source);
}
}
}
int main()
{
sf::Vector2f spriteSize (65, 72);
sf::Font font;
if (!font.loadFromFile("Sansation_Regular.ttf"))
return EXIT_FAILURE;
sf::Text pauseMessage;
pauseMessage.setFont(font);
pauseMessage.setCharacterSize(30);
pauseMessage.setPosition(150.f, 250.f);
pauseMessage.setColor(sf::Color::White);
pauseMessage.setString("Welcome to SFML Game!\nPress space to start the game");
// sf::RenderWindow app(sf::VideoMode(LARGEUR_TILE*NOMBRE_BLOCS_LARGEUR, HAUTEUR_TILE*NOMBRE_BLOCS_HAUTEUR, 32), "Tile Mapping - Test");
sf::RenderWindow app(sf::VideoMode(800,640,32), "Démo");
app.setVerticalSyncEnabled(true);
sf::Texture tileset;
tileset.loadFromFile("tileset1.bmp");
sf::Texture xwing1;
xwing1.loadFromFile("x_wing.png");
sf::Sprite xwing;
xwing.setTexture(xwing1);
xwing.setOrigin(spriteSize / 2.f);
sf::RectangleShape rectangle1(sf::Vector2f(65,72));
// rectangle1.setOutlineThickness(3);
// rectangle1.setPosition(10.f, 152.f);
rectangle1.setFillColor(sf::Color::White);
rectangle1.setOrigin(spriteSize / 2.f);
const float xwingSpeed = 200.f;
sf::Clock clock;
bool isPlaying = false;
while (app.isOpen())
{
sf::Event event;
while (app.pollEvent(event))
{
if ((event.type == sf::Event::Closed) ||
((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape)))
{
app.close();
break;
}
if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Space))
{
if (!isPlaying)
{
// (re)start the game
isPlaying = true;
clock.restart();
// xwing.setPosition((gameWidth / 2), gameHeight-200);
rectangle1.setPosition((gameWidth / 2), gameHeight-200);
}
}
if (isPlaying)
{
float deltaTime = clock.restart().asSeconds();
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up) &&
// (xwing.getPosition().y - spriteSize.y / 2 > 5.f))
(rectangle1.getPosition().y - spriteSize.y / 2 > 5.f))
{
// xwing.move(0.f, -15.f);
rectangle1.move(0.f, -xwingSpeed * deltaTime);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down) &&
// (xwing.getPosition().y + spriteSize.y / 2 < gameHeight - 5.f))
(rectangle1.getPosition().y + spriteSize.y / 2 < gameHeight - 5.f))
{
// xwing.move(0.f, 15.f);
rectangle1.move(0.f, xwingSpeed * deltaTime);
}
}
}
app.clear();
// Afficher(app, tileset, table, NOMBRE_BLOCS_LARGEUR, NOMBRE_BLOCS_HAUTEUR);
if (isPlaying)
{
// app.draw(xwing);
app.draw(rectangle1);
}
else
{
app.draw(pauseMessage);
}
// update(xwing);
app.display();
}
return EXIT_SUCCESS;
}
Que ce soit le sprite xwing ou rectangle1, le mouvement est saccadé.
Juste après l'appui sur la touche haut par exemple, le déplacement se fait de 40px environ et ensuite de 5 en 5 environ!
je ne comprends d'où cela peut venir!
j'ai le même problème sur les environnements Windows (core i5, intel HD Graphics 3000) et Mac (core i7, Intel Iris Pro Graphics).
Merci de votre aide.