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

valentin

Treue Seele

  • »valentin« ist der Autor dieses Themas

Beiträge: 212

Wohnort: Schweiz

Beruf: Schüler

  • Private Nachricht senden

1

13.04.2011, 21:09

Sfml: Bild anzeigen

Hi,
Ich hab' mal wieder ein Problem. Ich hab' gerade angefangen mich in die Sfml einzuarbeiten, und wollte deshalb ein Spiel schreiben. Die Steuerung etc. ist schon fertig, und deshalb wollte ich nun anfangen den Hintergrund etc. zu gestalten. Dazu lad' ich mir das Bild (background.png).

Doch schon hier kommt es zu einem Fehler. Beim Laden des Bildes kommt es anscheinend zu keinem Fehler, da sonst "Fehler beim Laden des Bildes" in der Konsole angezeigt werden würde, was bei mir nicht der Fall ist. Allerdings werden mir kryptische Zeichen in der Konsole ausgegeben, und es erscheint eine Zugriffsverletzung. Zudem wird ausgegeben "Failed to load image 'background.png'". Dies spricht dafür, dass es doch einen Fehler beim laden des Bildes gab. Das Bild liegt im Arbeitsverzeichnis. Gelinkt sind folgende libs:

sfml-system.lib
sfml-window.lib
sfml-graphics.lib

Kann mir jemand helfen?
Hier noch der Source:

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
int main()
{
    //FreeConsole();
    App.Create(sf::VideoMode(MAPWIDTH*40, MAPHEIGHT*40, 32), "Tank Wars");
    App.SetFramerateLimit(60);

    sf::Event Event;
    float Framerate;
    float ElapsedTime;

    sf::Image background;
    if (!background.LoadFromFile("background.png"))
        std::cout<<"Fehler beim laden des Bildes"<<std::endl;
    else
        temp.SetImage(background);

    while (App.IsOpened())
    {
        App.Clear();

        if(gameState == 0)
        {
            // TitelBildschirm
            App.Draw(temp);

            if(App.GetInput().IsKeyDown(sf::Key::Return))
                gameState = 1;
        }

        if(gameState == 1)
        {
            ElapsedTime=App.GetFrameTime();

            Player1.move(App.GetFrameTime());
            Player2.move(App.GetFrameTime());

            Framerate = 1.f / App.GetFrameTime();
            std::cout << Framerate << "\t" << Player1.xBeschleunigung<<"\t" <<Player1.xSpeedZiel<< "\t" <<Player1.xSpeed<<"\t" << Player1.yBeschleunigung<<"\t" <<Player1.ySpeedZiel<< "\t" <<Player1.ySpeed<<std::endl;
            Draw();
        }

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

            // Escape key pressed
            if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
                App.Close();
        }
         
        App.Display();
    }

    return EXIT_SUCCESS;
}

void Draw()
{
    App.Draw(Player1.Avatar);
    App.Draw(Player2.Avatar);
}




//edit: Ich hab' eben mal die Debug-libs (sfml-system-d.lib, sfml-window-d.lib, sfml-graphics-d.lib) gelinkt. Jetzt geht garnichts mehr, und es wird mir auch ein Fehler ausgegeben, wenn ich den Teil mit dem Bild laden weglass'.
visit me on deviantArt!
http://v-alentin.deviantart.com/

There is no programming language, no matter how structured, that will prevent programmers from making bad programs. //Larry Flon

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

2

13.04.2011, 23:40

Das Programm funktioniert mit Release-Libs, wenn du das Laden des Bildes weglässt oder gibt es da auch schon Fehler?
Hast du die Debug-Libs auch im Debug-Modus und nicht im Release-Modus gelinkt? Was für ein Fehler wird denn ausgegeben?
Prüfe mal, ob das Bild auch wirklich so existiert und nicht irgendein dummer Rechtschreibfehler im Bild ist oder anderes Format oder so.
Und packe in die If-Anweisung, in der geprüft wird, ob das Bild geladen werden konnte mal noch ein "return 0;" mit rein, damit das Programm bei einem solchen Fehler beendet wird. Sonst gibt es nur Chaos.
Welche SFML-Version nutzt du? 1.6 oder 2.0? Fuktioniert denn ein einfaches Programm, das ein Bild laden soll?
Also Beispiel:

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
int main()
{
    // Create the main rendering window
    sf::RenderWindow App(sf::VideoMode(800, 600, 32), "SFML Graphics");

    // Load the sprite image from a file
    sf::Image Image;
    if (!Image.LoadFromFile("sprite.tga"))
        return EXIT_FAILURE;

    // Create the sprite
    sf::Sprite Sprite(Image);

    // Start game loop
    while (App.IsOpened())
    {
        // Process events
        sf::Event Event;
        while (App.GetEvent(Event))
        {
            // Close window : exit
            if (Event.Type == sf::Event::Closed)
                App.Close();
        }


        // Clear screen
        App.Clear();

        // Display sprite in our window
        App.Draw(Sprite);

        // Display window contents on screen
        App.Display();
    }

    return EXIT_SUCCESS;
}

Oder gibt es da auch Fehler oder Probleme?

valentin

Treue Seele

  • »valentin« ist der Autor dieses Themas

Beiträge: 212

Wohnort: Schweiz

Beruf: Schüler

  • Private Nachricht senden

3

14.04.2011, 17:20

Wenn ich die Release-Libs linke funzt es. (Sofern ich das Laden des Bildes weglasse.) Die Debug-Libs hab' ich im Debug-Modus gelinkt. Der Fehler ist der folgende: "Die Anwendung konnte nicht richtig initialisiert werden (0xc0150002). Klicken sie auf "OK", um die Anwendung zu beenden.". Das Bild heisst exakt gleich. (Das war das erste, was ich geprüft hab', dann hab' ich noch zur Sicherheit den Namen einfach mal kopiert.) Ich nutze die SFML 1.6. Auch bei dem Simplen Laden eines Bildes (mit deinem Beispielcode) gibt es diese kryptische Ausgabe in der Konsole. Zumindest im Debug-Modus. Ich hab' s eben noch im Release-Modus getestet, und da klappt 's einwandfrei. Auch mein Code.

Komisch...

Somit ist das Problem zwar nichtmehr so dringend, aber trotzdem würde es mich interessieren, was denn der Fehler sein könnte. Ich tippe auf Fehlerhaft kompilierte debug-libs ^^.
visit me on deviantArt!
http://v-alentin.deviantart.com/

There is no programming language, no matter how structured, that will prevent programmers from making bad programs. //Larry Flon

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

4

14.04.2011, 17:36

Nutzt du Visual Studio 2010? Hast du Libs selbst kompiliert? Wenn nicht solltest du es auf jeden Fall mal machen ;).

valentin

Treue Seele

  • »valentin« ist der Autor dieses Themas

Beiträge: 212

Wohnort: Schweiz

Beruf: Schüler

  • Private Nachricht senden

5

14.04.2011, 17:51

Ich nutze Visual Studio 2010 und die Libs hab' ich selbstverständlich selber kompiliert.

//Edit: Hab's eben nochmals kompiliert und nun funktionierts... Danke für die Hilfe :D
visit me on deviantArt!
http://v-alentin.deviantart.com/

There is no programming language, no matter how structured, that will prevent programmers from making bad programs. //Larry Flon

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »valentin« (14.04.2011, 18:00)


Werbeanzeige