Salut,
J'ai lu le tutoriel de fvirtman sur le tilemapping et j'ai essayé de le reproduire sur la SFML 2.1 seulement voila quand je compile le programme cesse de fonctionné avec l'erreur windows et tous .
Voila le code:
main.cpp:
Map.h
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 #include <SFML/Audio.hpp> #include <SFML/Graphics.hpp> #include <SFML/Window.hpp> #include "Map.h" #define LARGEUR_TILE 64 #define HAUTEUR_TILE 60 #define NOMBRE_BLOCS_LARGEUR 10 #define NOMBRE_BLOCS_HAUTEUR 10 void deplacement(); void vue(); void load_perso(); //variables sf::Event event; float speed = 4.0; sf::RenderWindow window; sf::RectangleShape rectangle(sf::Vector2f(40,40)); sf::RectangleShape rec2(sf::Vector2f(50,100)); sf::View view; int screenH = 600; int screenW = 800; int blockSize = 45; sf::Texture perso; sf::Sprite sprite_perso; char* table[] = { "0000000000", "0000000000", "0000000000", "0000000000", "1000000001", "0000000000", "0000000000", "0000000000", "0034000222", "0056000000" }; //end variables int main() { sf::RenderWindow window(sf::VideoMode(LARGEUR_TILE * NOMBRE_BLOCS_LARGEUR, HAUTEUR_TILE * NOMBRE_BLOCS_HAUTEUR, 32), "Titre"); rectangle.setFillColor(sf::Color::Black); rec2.setFillColor(sf::Color::Red); rec2.setPosition(900,900); sf::Music music; Map map1("tileset.png"); map1.drawTuiles(window, table); load_perso(); while(window.isOpen()) { while(window.pollEvent(event)) { if(event.type == sf::Event::Closed) { window.close(); } else if (event.type == sf::Event::KeyPressed) { deplacement(); } } vue(); window.clear(sf::Color::Green); window.setView(view); window.draw(rec2); window.draw(sprite_perso); window.display(); //window.setPosition(sf::Vector2i(rand()%1000,rand()%1000)); } return EXIT_SUCCESS; }
Map.cpp
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 #ifndef MAP_H_INCLUDED #define MAP_H_INCLUDED #include <SFML/Graphics.hpp> #include <iostream> class Map { public: Map(std::string tileCharge); void drawTuiles(sf::RenderWindow &window, char** table); private: sf::Sprite m_spriteTile; sf::Image m_imageTile; sf::Texture m_textureTile; }; #endif // MAP_H_INCLUDED
Et enfin le tileset:
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 #include "Map.h" #include <SFML/Graphics.hpp> #define LARGEUR_TILE 24 #define HAUTEUR_TILE 16 #define NOMBRE_BLOCS_LARGEUR 15 #define NOMBRE_BLOCS_HAUTEUR 13 Map::Map(std::string tileCharge) { if(m_imageTile.loadFromFile(tileCharge)) { m_textureTile.loadFromImage(m_imageTile); m_spriteTile.setTexture(m_textureTile); } else { std::cout << "Erreur chargement tuiles"<<std::endl; } } void Map::drawTuiles(sf::RenderWindow &window, char** table) { m_spriteTile.setTexture(m_textureTile); for(int i(0); i < NOMBRE_BLOCS_LARGEUR; i++) { for(int j(0); i < NOMBRE_BLOCS_HAUTEUR; j++) { m_spriteTile.setTextureRect(sf::IntRect(sf::IntRect((table[i][j] - '0') * LARGEUR_TILE, 0, (table[j][i] - '0') * LARGEUR_TILE + LARGEUR_TILE, HAUTEUR_TILE))); m_spriteTile.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE); window.draw(m_spriteTile); } } }
Merci d'avance de votre aide,
Cordialement,
Partager