Bonjour à tous!
Dans le cadre d'un projet étudiant, je dois réaliser un petit JDR. Je n'en suis qu'aux prémisses, mais j'ai déjà un problème .
(Avant de lire la suite, gardez à l'esprit que je suis un débutant, et mon erreur est surement évidente)
J'ai créer une classe Ecran:
Les images et les sprites mis en private, ça me parait bien moche, mais je n'ai pas trouvé d'autre solution.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 class Ecran { public: Ecran (Carte& p_carte, int p_longueur, int p_hauteur); // Créer l'écran, en fonction de la carte et de la taille passé en paramètre void boucle_evenement(); void redessiner_case (int p_x, int p_y); //permet de redessiner une case en particulier private: void charger_carte (); void definir_ecran (int p_longueur, int p_hauteur); void ini_sprites (); sf::RenderWindow mon_ecran; sf::Sprite eau; sf::Sprite herbe; sf::Sprite lave; sf::Sprite pierre; sf::Sprite rocher; sf::Sprite sable; sf::Sprite terre; sf::Sprite vide; sf::Image f_imeau; sf::Image f_imherbe; sf::Image f_imlave; sf::Image f_impierre; sf::Image f_imrocher; sf::Image f_imterre; sf::Image f_imsable; sf::Image imvide; Carte* ma_carte; };
Dans le constructeur:
Oui, la boucle d'évènement est un gros copié-collé du tuto . Je ne l'ai rajouté que pour tester l'affichage, elle devrait être supprimé quand j'aurais réglé le problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Ecran::Ecran(Carte& p_carte, int p_longueur, int p_hauteur) { definir_ecran(p_longueur, p_hauteur); ini_sprites(); ma_carte = &p_carte; charger_carte(); while (mon_ecran.IsOpened()) { sf::Event Event; while (mon_ecran.GetEvent(Event)) { // Fenêtre fermée if (Event.Type == sf::Event::Closed) mon_ecran.Close(); // Touche 'echap' appuyée if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape)) mon_ecran.Close(); } } }
J'initialise mes sprites ici:
Le "resize" ne devrait pas être nécessaire, mais je voulais vérifier que le problème ne venait pas de là
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 void Ecran::ini_sprites() { if (!f_imeau.LoadFromFile("data/texture/eau.png")) { std::cout << "ERREUR LORS DU CHARGEMENT DE LA TEXTURE EAU"; } // Après initialisation de l'image, on charge les sprites en fonction de l'image voulu // On répète cette étape pour chaque Sprite. eau.SetImage(f_imeau); eau.Resize(50.f,50.f); if (!f_imherbe.LoadFromFile("data/texture/herbe.png")) { std::cout << "ERREUR LORS DU CHARGEMENT DE LA TEXTURE HERBE"; } herbe.SetImage(f_imherbe); herbe.Resize(50.f,50.f); if (!f_imlave.LoadFromFile("data/texture/lave.png")) { std::cout << "ERREUR LORS DU CHARGEMENT DE LA TEXTURE LAVE"; } lave.SetImage(f_imlave); lave.Resize (50.f,50.f); if (!f_impierre.LoadFromFile("data/texture/pierre.png")) { std::cout << "ERREUR LORS DU CHARGEMENT DE LA TEXTURE PIERRE"; } pierre.SetImage(f_impierre); pierre.Resize(50.f,50.f); if (!f_imrocher.LoadFromFile("data/texture/rocher.png")) { std::cout << "ERREUR LORS DU CHARGEMENT DE LA TEXTURE ROCHER"; } rocher.SetImage(f_imrocher); rocher.Resize(50.f,50.f); if (!f_imterre.LoadFromFile("data/texture/terre.png")) { std::cout << "ERREUR LORS DU CHARGEMENT DE LA TEXTURE TERRE"; } terre.SetImage(f_imterre); terre.Resize(50.f,50.f); if (!f_imsable.LoadFromFile("data/texture/sable.png")) { std::cout << "ERREUR LORS DU CHARGEMENT DE LA TEXTURE SABLE"; } sable.SetImage(f_imsable); sable.Resize(50.f,50.f); vide.SetColor(sf::Color(105, 105, 105)); vide.Resize(50.f,50.f); }
Pour finir, la fonction qui doit dessiner les Sprites:
J'ai vérifié, il rentre dans l'un des if au moment où il doit le faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 void Ecran::charger_carte() { int i,j; for (i=0;i<(*ma_carte).recup_ymax();i++) { for (j=0;j<(*ma_carte).recup_xmax();j++) { if ((*ma_carte).recup_case(j,i) == 1) { herbe.SetPosition (j*50,i*50); mon_ecran.Draw(herbe); } else if ((*ma_carte).recup_case(j,i) == 2) { pierre.SetPosition (j*50,i*50); mon_ecran.Draw(pierre); } else if ((*ma_carte).recup_case (j,i) == 3) { terre.SetPosition (j*50,i*50); mon_ecran.Draw(terre); } else if ((*ma_carte).recup_case(j,i) == 4) { sable.SetPosition (j*50,i*50); mon_ecran.Draw(sable); } else if ((*ma_carte).recup_case(j,i) == 21) { eau.SetPosition (j*50,i*50); mon_ecran.Draw(eau); } else if ((*ma_carte).recup_case(j,i) == 22) { lave.SetPosition (j*50,i*50); mon_ecran.Draw(eau); } else if ((*ma_carte).recup_case(j,i) == 23) { rocher.SetPosition(i*50,j*50); mon_ecran.Draw(rocher); } else { vide.SetPosition(j*50,i*50); mon_ecran.Draw(vide); } } } }
Mon problème, c'est que je n'ai aucun Warning ni message d'erreur, mais qu'à la place d'une fenêtre dessiné, j'ai un écran blanc.
Des idées?
Merci
Partager