-
Bonjour a tous,
Je suis en train de réaliser un RPG basé sur le tile mapping.
Pour cela je fais un éditeur de map, je tente d'afficher un quadrillage, pour l'instant de 4x4 carreaux.
Voila le code(j'ai volontairement retiré le code de la boucle et des initialisations) :
app.Clear();
// Affichage de quadrillage
for(int cptQuad1 = 1; cptQuad1 == 3; cptQuad1 ++){
quad.AddPoint(posQuad.x, posQuad.y, Color::Red);
quad.AddPoint(posQuad.x, posQuad.x * 4, Color::Red);
posQuad.x += 49;
app.Draw(quad); }
for(int cptQuad2 = 1; cptQuad2 == 3; cptQuad2 ++) {
quad.AddPoint(posQuad.x, posQuad.y, Color::Red);
quad.AddPoint(posQuad.x * 4, posQuad.x, Color::Red);
posQuad.y += 49;
app.Draw(quad); }
app.Display();
-
Personne ?
-
D'après ton post, j'en déduis que "quad" est une sf::Shape ?
J'ai personnellement un peu de mal avec ton code parce qu'il me donne l'impression que tu pars d'une Shape sans point, puis que tu boucles sur l'ajout de deux points dans ta forme puis affiches ta shape. J'en conclue que tu vas d'abord affiche une Shape de 2 points, puis 4, puis 6, puis sur la seconde boucle 8 points, 10 points, 12 points ? Sans la suite du code de plus, tu ne semble jamais clear ta forme, donc à chaque image on a de plus en plus de points.
Je t'aurais conseillé un code comme ceci
int width = 1280;
int height = 720;
int outlineWidth = 2;
for ( int x(0) ; x < width ; x += 49 )
for ( int y(0) ; y < height ; y += 49 ) {
app.Draw(sf::Shape::Line(x, 0, x, height, 0, sf::Color::White, outlineWidth));
app.Draw(sf::Shape::Line(0, y, width, 0, 0, sf::Color::White, outlineWidth));
}
Après n'oublie pas qu'il faut réglé la taille de l'outline de ta sf::Shape.
Je t'aurais tout de même conseillé l'utilisation des constructeurs prédéfinis qui facilitent la vie.
-
Tout d'abord merci pour ta réponse, ensuite j'ai oublié de préciser que je suis en 1.6.
Or en 1.6 Shape::Line n'existe pas.
Et oui quad est un Shape.
Sachant que je ne peut pas utiliser Shape::Line, voila une modification de mon code qui(que j'ai faite en fonction de tes remarques), surement, sera plus comprehensible
(ce code est dans la boucle génerale de l'app) :
Vector2f posQuad;
posQuad.x = 49;
posQuad.y = 0;
Shape quadV;
quadV.AddPoint(posQuad.x, posQuad.y, Color::Red, Color::Red);
quadV.AddPoint(posQuad.x, 49 * 4, Color::Red, Color::Red);
quadV.SetOutlineWidth(2);
Shape quadH;
quadH.AddPoint(0, posQuad.y, Color::Red, Color::Red);
quadH.AddPoint(49 * 4, 0, Color::Red, Color::Red);
quadH.SetOutlineWidth(2);
DANS LA BOUCLE GENERALE:
// Affichage de quadrillage
// Axe Vertical
app.Draw(quadV);
for(int cptQuad1 = 1; cptQuad1 <= 3; cptQuad1 ++){
quadV.SetPointPosition(0, posQuad.x, posQuad.y);
quadV.SetPointPosition(1, posQuad.x, 49 * 4);
posQuad.x += 49;
app.Draw(quadV); }
// Axe Horizontal
app.Draw(quadH);
for(int cptQuad2 = 1; cptQuad2 <= 3; cptQuad2 ++) {
quadH.SetPointPosition(0, posQuad.x, posQuad.y);
quadH.SetPointPosition(1, 49 * 4, posQuad.y);
posQuad.y += 49;
app.Draw(quadH); }
app.Display();
posQuad.x = 49;
posQuad.y = 0;
Mais comme avant, rien ne s'affiche . :'(
Voila, merci d'avance a ceux qui me réponderont ; )
-
Et c'est quoi le problème ? Parce que là tu dis juste "j'ai un problème, voilà le code" mais on sait ni ce qui se passe ni ce que tu voudrais qu'il se passe. :-\
Tout d'abord merci pour ta réponse, ensuite j'ai oublié de préciser que je suis en 1.6.
Or en 1.6 Shape::Line n'existe pas.
Ben si justement sf::Shape::Line existe en 1.6 (http://sfml-dev.org/documentation/1.6/classsf_1_1Shape.php#a4932be5dc0e67ae085a540617de1c8c6), c'est en 2.0 qu'elle n'existe plus. (malheureusement ?)
-
Whao, je suis vraiment désolé.
J'avais mal cherché. Mon problème était que la quadrillage ne s'affichait pas .
Mais comme Line existe je vais laisser de coté mes lignes de code inutiles et utiliser ce qui existe.
Mon ancien code restera comme même un mystère. :-\
Merci pour ta réponse.