1
Général / Re : Besoin d'aide déplacement isométrique
« le: Mars 15, 2015, 02:21:53 pm »
Merci pour tes explications mais j'ai pas compris "norme"
Qu'est ce qui est utile/inutile dans ce que j'ai mis comme idées ?
J'ai enlevé tout ce qui était pas utile dans mon code puis j'ai essayé d'intégré ce que tu as mis.
J'ai eu des erreurs,j'en ai résolues mais il m'en reste 2.
Code :
Erreurs :
Je comprend les 2 messages d'erreurs mais je vois pas comment les résoudre.
J'ai encore besoin d'aide.
Je m'excuse mais j'ai vraiment du mal aujourd'hui, j'ai l'impression que mon cerveau est resté au lit.
Qu'est ce qui est utile/inutile dans ce que j'ai mis comme idées ?
J'ai enlevé tout ce qui était pas utile dans mon code puis j'ai essayé d'intégré ce que tu as mis.
J'ai eu des erreurs,j'en ai résolues mais il m'en reste 2.
Code :
#include <SFML/Graphics.hpp>
using namespace std;
using namespace sf;
int loading ( 1 );
int largeurfond = 0;
int main()
{
sf::RenderWindow window(sf::VideoMode(1280, 720,32), "SFML Test",sf::Style::Close);
window.setVerticalSyncEnabled(true);
sf::View view(sf::FloatRect(0, 0, 640, 360));
sf::Color alpha(250,100,250);
sf::Color fond (128,225,255);
sf::Texture background;
if (!background.loadFromFile("test.png"))
return -1;
sf::Sprite back;
back.setTexture(background);
largeurfond = background.getSize().x;
sf::Texture splashscreen;
if (!splashscreen.loadFromFile("Intro.png"))
return -1;
sf::Sprite intro;
intro.setTexture(splashscreen);
sf::Image mage;
if (!mage.loadFromFile("mage.png"))
return -1;
mage.createMaskFromColor(alpha);
sf::Texture maget;
if (!maget.loadFromImage(mage,sf::IntRect(0, 0, 64, 64)))
return -1;
sf::Sprite spritemage;
spritemage.setTexture(maget);
spritemage.setPosition(sf::Vector2f(480, 160));
sf::Clock clock;
sf::Clock clock2;
while (window.isOpen())
{
if( loading == 1 )//image d'intro
{
sf::Time tt = sf::seconds(5.0);
sf::Time elapsed = clock.getElapsedTime();
window.draw(intro);
window.display();
if (elapsed >= tt)
{
loading = 0;
clock.restart();
}
}
if( loading == 0 )//démarrage de la partie jeu
{
window.setView(view);
sf::Vector2i position = sf::Mouse::getPosition(window);//position de la souris dans la fenêtre
sf::Vector2f worldPos = window.mapPixelToCoords(position);//position de la souris dans le monde
string title ( "SFML Test ");
std::string posx = std::to_string ( (int)position.x );
std::string posy = std::to_string ( (int)position.y );
std::string worldPosx = std::to_string ( (int)worldPos.x );
std::string worldPosy = std::to_string ( (int)worldPos.y );
float mousemapx = ( worldPos.x - 320 );
float mousemapy = worldPos.y;
float tilemx = ((mousemapy/32) + (mousemapx/64));
float tilemy = ((mousemapy/32) - (mousemapx/64));
int tilecx = (int)floor (tilemx );//case ou est la souris
int tilecy = (int)floor (tilemy );//case ou est la souris
std::string tilex = std::to_string ( tilecx );
std::string tiley = std::to_string ( tilecy );
int spriteox = (320 + (( tilecx - tilecy )*(64/2))) -32;
int spriteoy = ((( tilecx + tilecy ) * (32/2))) -32;
std::string spriteorix = std::to_string ( spriteox );
std::string spriteoriy = std::to_string ( spriteoy );
title += "Pos Window ";
title += posx;
title += " ";
title += posy;
title += " ";
title += "Pos World ";
title += worldPosx;
title += " ";
title += worldPosy;
title += " ";
title += "Tile ";
title += tiley;
title += ":";
title += tilex;
title += " ";
title += "Spriteorigin ";
title += spriteorix;
title += ":";
title += spriteoriy;
window.setTitle(title);
int vitesse = 100;
sf::Vector2f spritepos (spriteox,spriteoy);//position d'affichage de sprite pour la case ou est la souris
sf::Vector2f posmage = spritemage.getPosition();
float longueur = sqrt ( pow ( (spritepos.x - posmage.x),2 ) + ( pow( (spritepos.y - posmage.y ),2 ) ) );
sf::Time elapsed2 = clock2.getElapsedTime();
sf::Vector2f direction = spritepos - posmage;
sf::Vector2f direction = direction / longueur;
sf::Vector2f deplacement = direction * vitesse * elapsed2.asSeconds();
sf::Event event;
while (window.pollEvent(event))
{
switch (event.type)
{
// window closed
case sf::Event::Closed:
window.close();
break;
// key pressed
case sf::Event::KeyPressed:
{
if (event.key.code == sf::Keyboard::S)
{
view.move(0, -32);
}
else if (event.key.code == sf::Keyboard::X)
{
view.move(0, 32);
}
else if (event.key.code == sf::Keyboard::W)
{
view.move(-64, 0);
}
else if (event.key.code == sf::Keyboard::C)
{
view.move(64, 0);
}
}
break;
case sf::Event::MouseButtonPressed:
{
if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left)
{
spritemage.move(deplacement);
clock2.restart();
}
}
break;
default:
break;
}
}
window.setView(view);
window.clear(fond);
window.draw(back);
window.draw(spritemage);
}
}
return 0;
}
using namespace std;
using namespace sf;
int loading ( 1 );
int largeurfond = 0;
int main()
{
sf::RenderWindow window(sf::VideoMode(1280, 720,32), "SFML Test",sf::Style::Close);
window.setVerticalSyncEnabled(true);
sf::View view(sf::FloatRect(0, 0, 640, 360));
sf::Color alpha(250,100,250);
sf::Color fond (128,225,255);
sf::Texture background;
if (!background.loadFromFile("test.png"))
return -1;
sf::Sprite back;
back.setTexture(background);
largeurfond = background.getSize().x;
sf::Texture splashscreen;
if (!splashscreen.loadFromFile("Intro.png"))
return -1;
sf::Sprite intro;
intro.setTexture(splashscreen);
sf::Image mage;
if (!mage.loadFromFile("mage.png"))
return -1;
mage.createMaskFromColor(alpha);
sf::Texture maget;
if (!maget.loadFromImage(mage,sf::IntRect(0, 0, 64, 64)))
return -1;
sf::Sprite spritemage;
spritemage.setTexture(maget);
spritemage.setPosition(sf::Vector2f(480, 160));
sf::Clock clock;
sf::Clock clock2;
while (window.isOpen())
{
if( loading == 1 )//image d'intro
{
sf::Time tt = sf::seconds(5.0);
sf::Time elapsed = clock.getElapsedTime();
window.draw(intro);
window.display();
if (elapsed >= tt)
{
loading = 0;
clock.restart();
}
}
if( loading == 0 )//démarrage de la partie jeu
{
window.setView(view);
sf::Vector2i position = sf::Mouse::getPosition(window);//position de la souris dans la fenêtre
sf::Vector2f worldPos = window.mapPixelToCoords(position);//position de la souris dans le monde
string title ( "SFML Test ");
std::string posx = std::to_string ( (int)position.x );
std::string posy = std::to_string ( (int)position.y );
std::string worldPosx = std::to_string ( (int)worldPos.x );
std::string worldPosy = std::to_string ( (int)worldPos.y );
float mousemapx = ( worldPos.x - 320 );
float mousemapy = worldPos.y;
float tilemx = ((mousemapy/32) + (mousemapx/64));
float tilemy = ((mousemapy/32) - (mousemapx/64));
int tilecx = (int)floor (tilemx );//case ou est la souris
int tilecy = (int)floor (tilemy );//case ou est la souris
std::string tilex = std::to_string ( tilecx );
std::string tiley = std::to_string ( tilecy );
int spriteox = (320 + (( tilecx - tilecy )*(64/2))) -32;
int spriteoy = ((( tilecx + tilecy ) * (32/2))) -32;
std::string spriteorix = std::to_string ( spriteox );
std::string spriteoriy = std::to_string ( spriteoy );
title += "Pos Window ";
title += posx;
title += " ";
title += posy;
title += " ";
title += "Pos World ";
title += worldPosx;
title += " ";
title += worldPosy;
title += " ";
title += "Tile ";
title += tiley;
title += ":";
title += tilex;
title += " ";
title += "Spriteorigin ";
title += spriteorix;
title += ":";
title += spriteoriy;
window.setTitle(title);
int vitesse = 100;
sf::Vector2f spritepos (spriteox,spriteoy);//position d'affichage de sprite pour la case ou est la souris
sf::Vector2f posmage = spritemage.getPosition();
float longueur = sqrt ( pow ( (spritepos.x - posmage.x),2 ) + ( pow( (spritepos.y - posmage.y ),2 ) ) );
sf::Time elapsed2 = clock2.getElapsedTime();
sf::Vector2f direction = spritepos - posmage;
sf::Vector2f direction = direction / longueur;
sf::Vector2f deplacement = direction * vitesse * elapsed2.asSeconds();
sf::Event event;
while (window.pollEvent(event))
{
switch (event.type)
{
// window closed
case sf::Event::Closed:
window.close();
break;
// key pressed
case sf::Event::KeyPressed:
{
if (event.key.code == sf::Keyboard::S)
{
view.move(0, -32);
}
else if (event.key.code == sf::Keyboard::X)
{
view.move(0, 32);
}
else if (event.key.code == sf::Keyboard::W)
{
view.move(-64, 0);
}
else if (event.key.code == sf::Keyboard::C)
{
view.move(64, 0);
}
}
break;
case sf::Event::MouseButtonPressed:
{
if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left)
{
spritemage.move(deplacement);
clock2.restart();
}
}
break;
default:
break;
}
}
window.setView(view);
window.clear(fond);
window.draw(back);
window.draw(spritemage);
}
}
return 0;
}
Erreurs :
Je comprend les 2 messages d'erreurs mais je vois pas comment les résoudre.
J'ai encore besoin d'aide.
Je m'excuse mais j'ai vraiment du mal aujourd'hui, j'ai l'impression que mon cerveau est resté au lit.