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

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

41

01.01.2016, 11:58

Na und das Problem ist nun welches?

Es wird einfach nicht dargestellt. Es wird halt nur der Spieler und der Hintergrund dargestellt :dash:

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

42

01.01.2016, 12:25

Debugger:
F9, F5, F10, F11

Schau Dir z.B. mal an was denn in "m_vertices" drin steht, die Du da versuchst in draw() zu zeichnen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (01.01.2016, 12:35)


cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

43

03.01.2016, 11:02

Schau Dir z.B. mal an was denn in "m_vertices" drin steht, die Du da versuchst in draw() zu zeichnen.

Nichts ?( Also besser gesagt, es hat keine Größe :dash:

Aber ich habe jetzt noch mal die "load"-Methode überarbeitet. Jetzt wird es erstmal dargestellt ^^
»cojo2015« hat folgende Bilder angehängt:
  • Unbenannt.PNG
  • Unbenannt2.PNG

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »cojo2015« (03.01.2016, 11:10)


cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

44

03.01.2016, 11:33

Jetzt hab ich aber noch das Probelm, dass ich zwar das Level darstellen kann, aber ich kann es nicht verändern bzw. variabel halten (was ja eigentlich das Ziel ist ^^ ). HIer nochmal der allgemeine Ablauf, wenn das Programm startet:
1. RessourceManager, CollisionsSystem und GameStates initialisieren
1.1 Wenn der PlayState an der Reihe ist, wird der Konstruktor aufgerufen und eine Instanz von Tilemap erzeugt, welche sofort initialisiert wird. Der nächste Schritt im Konstruktor sieht so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
level[] = map.getLevelData(); //level[] = int level[];

//load the map
if (!map.load(game, MAP_FILE_PATH, sf::Vector2u(16, 16), level, 16, 8))
{
    int result = MessageBox(NULL, "Failed to load the map in PlayState.cpp!", "ERROR", MB_OK | MB_ICONERROR);
    if (result == IDOK)
        game.App.close();
}


getLevelData sieht so aus:

C-/C++-Quelltext

1
2
3
4
int Tilemap::getLevelData()
{
    return std::stoi(line);
}


Und load so:

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
bool Tilemap::load(Game &game, const std::string& tileset, sf::Vector2u tileSize, const int* tiles, unsigned int width, unsigned int height)
{
    //set a texture
    m_tileset = game.R_Manager->getTexture(RessourceManager::Textures::SPRITESHEET_LEVEL1);

    //m_level[] = getLevelData();

    // resize the vertex array to fit the level size
    m_vertices.setPrimitiveType(sf::Quads);
    m_vertices.resize(width * height * 4);

    // populate the vertex array, with one quad per tile
    for (unsigned int i = 0; i < width; ++i)
        for (unsigned int j = 0; j < height; ++j)
        {
            // get the current tile number
            int tileNumber = tiles[i + j * width];

            // find its position in the tileset texture
            int tu = tileNumber % (m_tileset.getSize().x / tileSize.x);
            int tv = tileNumber / (m_tileset.getSize().x / tileSize.x);

            // get a pointer to the current tile's quad
            sf::Vertex* quad = &m_vertices[(i + j * width) * 4];

            // define its 4 corners
            quad[0].position = sf::Vector2f(i * tileSize.x, j * tileSize.y);
            quad[1].position = sf::Vector2f((i + 1) * tileSize.x, j * tileSize.y);
            quad[2].position = sf::Vector2f((i + 1) * tileSize.x, (j + 1) * tileSize.y);
            quad[3].position = sf::Vector2f(i * tileSize.x, (j + 1) * tileSize.y);

            // define its 4 texture coordinates
            quad[0].texCoords = sf::Vector2f(tu * tileSize.x, tv * tileSize.y);
            quad[1].texCoords = sf::Vector2f((tu + 1) * tileSize.x, tv * tileSize.y);
            quad[2].texCoords = sf::Vector2f((tu + 1) * tileSize.x, (tv + 1) * tileSize.y);
            quad[3].texCoords = sf::Vector2f(tu * tileSize.x, (tv + 1) * tileSize.y);
        }

    return true;
}


EDIT:
Konstruktor von Tilemap:

C-/C++-Quelltext

1
2
3
4
Tilemap::Tilemap(const std::string &path)
{
    read(path);
}


Und read:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool Tilemap::read(const std::string & path)
{
    std::ifstream i_stream(path);

    //return false if the file does not exist
    if (!i_stream)
        return false;
    else
    {
        while (i_stream)    //cancel at an error or end of file
        {
            std::getline(i_stream, line);   //read the current line
        }
    
        return true;
    }
}


Aber leider bekomme ich die Fehler:

Fehler C2059 Syntaxfehler: "]"
Fehler C2143 Syntaxfehler: Es fehlt ";" vor "{"
Fehler C2143 Syntaxfehler: Es fehlt ";" vor "}"

C-/C++-Quelltext

1
2
//PlayState::PlayState
level[] = map.getLevelData();

verursacht den Fehler. Aber wie kann ich ihn beheben?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

45

03.01.2016, 11:35

Aber wie kann ich ihn beheben?
Du kannst das beheben, indem Du Dir die Syntax-Regeln für C++ noch einmal anschaust.

In getLevelData steht noch immer ein ziemlich unsinniger Return-Wert drin, das wurde ja schon angesprochen. Du musst wirklich anfangen zu verstehen, was Du da schreibst und vor allem auch, was Du eigentlich erreichen willst.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige