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

1

13.07.2015, 18:36

[C++ | SFML] Fehler bei Tilemaps laden (verschachtelte for-Schleife)

Hallo Leute,

ich programmiere ein 2D-SPiel in der SFML. In dem Spiel benötige ich Kacheln/Raster zur Fortbewegung. Um diese Kacheln/Raster zu erzeugen habe ich mich für Tilemaps entschieden.
Nun zu meinem Problem: Diese verschachtelten for.-Schleifen habe ich aus einem anderen Projekt (dass auch mit Tilemaps funktioneiert) hineinkopiert und die Werte und Namen angepasst. Aber wenn ich das Programm starte, stürtzt sozusagen das Fenster ab und nur in der Konsole wird der Text "Map laden..." immer wieder ausgegeben. Was ist der Fehler? Hier ist die Ganze Datei:

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
#include "map\include\Map.hpp"

#pragma region Map
// Map erstellen (32 x 18)
//
int map[MAPWITH][MAPHEIGHT] = {
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

};

#pragma endregion Map



// LoadMap
//
// Aufgage: Läd die Map
//
void Map::LoadMap()
{
    if (!mMapTexture.loadFromFile("assets\Textures\Map\tile.png"))
    {
        throw std::runtime_error("Map konnte nicht geladen werden");
    }
    else
        mMapSprite.setTexture(mMapTexture);

}



// Render
//
// Aufgabe: Die Map rendern
//
void Map::Render(sf::RenderWindow &App)
{
    for (int y = 0; y < MAPHEIGHT; ++y)
    {
        for (int x = 0; x < MAPWITH; ++x)
        {
            mMapSprite.setPosition(0.f, 0.f);

            App.draw(mMapSprite);
            std::cout << "Map laden..." << std::endl;

        }
    }
}


Vielen Dank im Voraus!

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

13.07.2015, 18:43

Das ist kein Fehler. Du hast ja schließlich in deinem Code stehen, dass pro Frame über 500 mal ein "Map laden..." auf der Konsole ausgegeben werden soll.
Die Zeile solltest du einfach mal entfernen...

Generell:
Warum kopierst du Code, den du offensichtlich nicht verstehst?
Wie du siehst hilft dir das eben überhaupt nicht.

3

13.07.2015, 18:45

Der erste Fehler, der mir auffällt:
Deine "Map" ist nicht 2dimensional, sondern 1 dimensional (bzw. du setzt die Daten nur für eine Dimension). Gibt doch mit Sicherheit auch einen compiler Fehler.

2. Zeile 59 ist mit sicherheit auch fehlerhaft.

hanhau

Treue Seele

Beiträge: 80

Wohnort: St. Pölten, Österreich

Beruf: schueler

  • Private Nachricht senden

4

13.07.2015, 18:51

Code kopieren geht meistens nie gut, selbst wenn es so "ähnlich" funktioniert.

Spiele dich am besten mit TileMaps herum und finde eigene Lösungswege heraus.
Hab ich auch damals gemacht und nun klappt alles prima und ich kenne mich zu 100% aus.
Oft denke ich an sie, niemals habe ich sie gefragt, niemals etwas gesagt,
nur verzweifelt am PC gesessen und dabei die Zeit vergessen, sie ist weg.

Hello_Kitty!

unregistriert

5

13.07.2015, 19:48

Deine "Map" ist nicht 2dimensional, sondern 1 dimensional (bzw. du setzt die Daten nur für eine Dimension). Gibt doch mit Sicherheit auch einen compiler Fehler.


Dabei handelt es sich um einen Sonderfall der aggregate initialization, die verschachtelten Klammern dürfen unter bestimmten Voraussetzungen weggelassen werden:

Zitat

If the aggregate initialization uses the form with the equal sign (T a = {args..}), (until C++14) the braces around the nested initializer lists may be elided (omitted), in which case as many initializer clauses as necessary are used to initialize every member or element of the corresponding subaggregate, and the subsequent initializer clauses are used to initialize the following members of the object. However, if the object has a sub-aggregate without any members (an empty struct, or a struct holding only static members), brace elision is not allowed, and an empty nested list {} must be used.

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

6

13.07.2015, 19:56

Danke fr die vielen und schnellen Antowrten. Ich werde sie morgen mal genauer ansehen. Danke für die Mühe :)

7

13.07.2015, 19:59

Deine "Map" ist nicht 2dimensional, sondern 1 dimensional (bzw. du setzt die Daten nur für eine Dimension). Gibt doch mit Sicherheit auch einen compiler Fehler.


Dabei handelt es sich um einen Sonderfall der aggregate initialization, die verschachtelten Klammern dürfen unter bestimmten Voraussetzungen weggelassen werden:

Zitat

If the aggregate initialization uses the form with the equal sign (T a = {args..}), (until C++14) the braces around the nested initializer lists may be elided (omitted), in which case as many initializer clauses as necessary are used to initialize every member or element of the corresponding subaggregate, and the subsequent initializer clauses are used to initialize the following members of the object. However, if the object has a sub-aggregate without any members (an empty struct, or a struct holding only static members), brace elision is not allowed, and an empty nested list {} must be used.

Oh, wieder was gelernt ;)

Werbeanzeige