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

22.03.2011, 14:50

SDL Tile

Hey

Ich habe mal wieder eine Frage. Ich versuche schon seit einigen Tagen tile maps mit der SDL zu machen aber ich teste und teste aber es geht nicht.
Ich weiss echt nicht was der Fehler ist deswegen kann ich euch keine bessere Beschreibung geben. Ich sehe nur ein schwarzes Fenster wenn ich es starte und danach geht es einfach wieder zu.

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
#include "Sprite.hpp"
#include "Framework.hpp"

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

// tile größe
const int tile_breite = 40;
const 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 (int argc, char *argv[])
{
    int Auswahl = 0;

     if (g_pFramework->Init (800, 600, 32, false) == false)
         return (0);
         

    // Sprites erstellen
    CSprite map_sprites[7];


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

    while (true)
    {
        for( int i = 0; i < map_hoehe; i++)
        {
            // alle zeilen durchlaufen
            for( int j = 0; j < map_breite; j++)
            {
                    // boden zeichnen
                map_sprites[tilemap[i][j]].SetPos(j*tile_breite, i*tile_hoehe);
                map_sprites[tilemap[i][j]].Render();

            }
        }
    }


    return 0;

}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Tunfisch« (22.03.2011, 15:32)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

22.03.2011, 15:17

Gibst ja auch nirgends Fehler aus (z.B. wenn es nicht initialisiert werden kann), das solltest du vllt. mal ändern.
Updatest du denn eig. den screen, mit SDL_Update bzw. SDL_Flip? Ich sehe das nirgends, aber kann ja sein, dass du das in der Render Methode tust.
Ansonsten noch zwei nützliche Links.
#1 und #2. Letzteres verwendet zwar D aber das ist nicht unähnlich zu C++.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

3

22.03.2011, 15:30

in der Render funktion ist nur das hier drin

C-/C++-Quelltext

1
2
3
4
5
6
void CSprite::Render ()
{
  // Sprite rendern
  SDL_BlitSurface (m_pImage, NULL, m_pScreen, &m_Rect);

} // Render

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

4

22.03.2011, 15:34

Dann nimm dir mal das und das zu herzen. Updatest du den kompletten screen benutze

C-/C++-Quelltext

1
SDL_UpdateRect(SDL_Surface *, 0, 0, 0, 0);
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

5

22.03.2011, 15:44

Das mit dem Updaten habe ich gerade auch getestet leider aber ohne Erfolg

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

6

22.03.2011, 15:47

Dann frag doch, wie gesagt, mal ab, ob das ganze initalisiert werden könnte und wenn nicht gib einen entsprechenden Fehler aus.
Also:

C-/C++-Quelltext

1
2
3
if (g_pFramework->Init (800, 600, 32, false) == false) {
    std::cout << "Fail beim init." << std::endl;
}
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

7

22.03.2011, 15:51

habe ich gemacht leider passiert wieder gar nichts nur bildschirm geöffnet schwarzer hintergrund dann wieder geschlossen

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

8

22.03.2011, 15:54

Was ja heißt, dass er gar nicht zur while Schleife kommt, oder das was heftiges in der while-Schleife passiert. Leider kenne ich weder dein Framework noch deine gesamte CSprite Klasse.
Was du machen könntest wären a) deinen Code als .zip zur Verfügung zu stellen und b) debuggen oder self-made debuggen indem du schrittweise Code auskommentierst und guckst wann es klappt. Dann kannst du deinen Fehler schon einmal sehr gut eingrenzen.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

9

22.03.2011, 16:00

ich habe mal mein Projekt als zip http://uploaded.to/file/xy1uysxm

debugger geht bei mir nicht weil ich die sdl nur im release modus eingefügt habe und im debug modus es irgendwie nicht geht

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

10

22.03.2011, 16:03


debugger geht bei mir nicht weil ich die sdl nur im release modus eingefügt habe und im debug modus es irgendwie nicht geht


b) oder self-made debuggen indem du schrittweise Code auskommentierst und guckst wann es klappt.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige