Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

25.03.2011, 18:09

SFML Tiles

Hallo ich habe gerade eine Tile Map in SFML programmiert nur hab ich jetzt den Fehler das es irgendwie die Tiles nicht richtig lädt wieso weiß ich jetzt nicht ich kann euch nur sagen das wenn ich das Programm starte es so aussieht

http://www.fotos-hochladen.net/uploads/u…tg4lwk9y3ms.jpg

Quelltext

C-/C++-Quelltext

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
79
80
81
82
83
84
85
86
87
88
89
90
////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Graphics.hpp>

//  map größe
const unsigned int map_breite = 20;
const unsigned int map_hoehe = 10;

// tile größe
const unsigned int tile_breite = 40;
const unsigned int tile_hoehe = 40;

// beschreibt die Anzahl der Sprites, 
// die in der Map verwendet werden
const unsigned int sprite_anzahl = 7;



// die map
unsigned int tilemap[map_hoehe][map_breite] =  
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1,
    1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};


int main()
{
    // Create main window
    sf::RenderWindow App(sf::VideoMode(800, 400), "SFML Fonts");

    // Sprites erstellen
    sf::Image map_sprites[7];

    // Grafiken laden
    map_sprites[0].LoadFromFile("Data/Texturen/boden.bmp");
    map_sprites[1].LoadFromFile("Data/Texturen/wand.bmp");
    map_sprites[2].LoadFromFile("Data/Texturen/kerkertuer.bmp");
    map_sprites[3].LoadFromFile("Data/Texturen/zellentuer.bmp");
    map_sprites[4].LoadFromFile("Data/Texturen/schatz.bmp");
    map_sprites[5].LoadFromFile("Data/Texturen/monster.bmp");
    map_sprites[6].LoadFromFile("Data/Texturen/held.bmp");

    sf::Sprite Sprite[7];

    for ( int i=0; i >= 6; i++)
    {
    Sprite[i].SetImage(map_sprites[i]);
    Sprite[i].GetSize ();
    }

    App.Clear ();

            // map zeichnen  
            // alle spalten durchlaufen
            for( int i = 0; i < map_hoehe; i++)
            {
                // alle zeilen durchlaufen
                for( int j = 0; j < map_breite; j++)
                {
                    int Spritte = tilemap [i][j];

                    // boden zeichnen
                    Sprite[tilemap[i][j]].SetPosition(j*tile_breite, i*tile_hoehe);
                    App.Draw (Sprite[Spritte]);
                    App.Display ();
                }
            }
    while (App.IsOpened())
    {
        sf::Event Event;

        while (App.GetEvent(Event))
        {
            // Close window : exit
            if (Event.Type == sf::Event::Closed)
                App.Close();
        }
        
    }

        return EXIT_SUCCESS;
}

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

25.03.2011, 18:24

Ohne groß zu gucken zwei Sachen:

C-/C++-Quelltext

1
2
3
4
5
 for ( int i=0; i >= 6; i++)
    {
    Sprite[i].SetImage(map_sprites[i]);
    Sprite[i].GetSize ();
    }


Meinst du nicht vllt <= 6 ?

Und

C-/C++-Quelltext

1
App.Clear();
sollte nach

C-/C++-Quelltext

1
while (App.IsOpened())
also in der while Schleife stehen
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

GameProggD3D

Frischling

Beiträge: 67

Wohnort: Walding

Beruf: Schüler

  • Private Nachricht senden

3

25.03.2011, 19:09

Sprite[ i].GetSize ();

Wieso rufst du die Methode auf, obwohl du den zurückgegebenen Wert nirgends speicherst?
App.Draw (Sprite[Spritte]);
App.Display ();
}
Du musst nicht nach jedem neu gezeichneten Sprite sofort das Fenster anzeigen. Es reicht, wenn du zuerst alles zeichnest und am Schluss Display() aufrufst.
Und

App.Clear();
sollte nach

while (App.IsOpened())
also in der while Schleife stehen
Da er die Map nur 1x zeichnet und dann nie wieder würde ein Clear in der While-Schleife dazu führen, dass die karte nach dem 1.Frame vom Bildschirm gelöscht wird.

@Tunfisch: Aber er hat Recht. Normalerweise wird Clear in der while-Schleife aufgerufen. Wieso verlegst du nicht das gesamte Map-Zeichnen in die while-Schleife?
Programmiere Zombie-Spiel mit nem Freund

4

26.03.2011, 16:25

Nach ein bisschen rumprobieren hab ich es jetzt auch geschafft musste in paar sachen umstellen. Nochmal Danke für die antworten und sry das ich das ins Forum 3D Spieleprogrammierung gepostet habe ich dachte ich wär im Forum Programmierung allgemein.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

5

27.03.2011, 14:23

Ich habe es trotzdem mal noch verschoben ;).

Werbeanzeige