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

26.11.2010, 20:20

SFML Bild in Sprite laden

Hallo @ all,

ich hoffe ihr könnt mir helfen.
Und zwar programmiere ich seit ein paar Jahren mit der IDE QT von Trolltech.
Ich habe bis jetzt nur GUI-Anwendungen programmiert, also dachte ich mir, ich will mit Spielen anfangen.
Dazu habe ich die SFML Library geholt und in QT eingebunden.
Soweit so gut, doch wenn ich ein Bild in mein Sprite laden will, zeigt er es mir einfach nicht an.
Die Datei liegt, dort wo auch die .cpp Datei liegt. Ich hab auch schon versucht sie dort hinzukopieren wo die .exe ist--> erfolglos
Statdessen bekomm ich nur meinen weissen Sprite zu sehen, den ich auch bewegen kann, jedoch eben ohne mein Bild :(

Ich hoffe ihr könnt mir bei meinem Problem helfen.
Wäre sehr dankbar

mfg timi19

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
#include <SFML/Graphics.hpp>  int main()
 {
     //Fenster erstellen
     sf::RenderWindow game(sf::VideoMode(800, 600, 32), "Testspiel");
      //Bilder laden und in Sprite "zeichnen"
     sf::Image image;
     image.LoadFromFile("test.png");
     sf::Sprite sprite;
     sprite.SetSubRect(sf::IntRect(10, 10, 80, 80));
     sprite.SetImage(image);
      // Gameloop starten
     while (game.IsOpened())
     {
         // Prozesse
         sf::Event Event;
         while (game.GetEvent(Event))
         {
             // Fenster schliessen
             if (Event.Type == sf::Event::Closed)
                 game.Close();
         }
         //Steuerung
         float ElapsedTime = game.GetFrameTime();
          if (game.GetInput().IsKeyDown(sf::Key::Left))  sprite.Move(-200 * ElapsedTime, 0);
         if (game.GetInput().IsKeyDown(sf::Key::Right)) sprite.Move( 200 * ElapsedTime, 0);
         if (game.GetInput().IsKeyDown(sf::Key::Up))    sprite.Move(0, -200 * ElapsedTime);
         if (game.GetInput().IsKeyDown(sf::Key::Down))  sprite.Move(0,  200 * ElapsedTime);
          // Fenster reinigen
         game.Clear();
         game.Draw(sprite);
          // Fenster neu schreiben
         game.Display();
     }
      return 0;
 }
»timi19« hat folgendes Bild angehängt:
  • test.png

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

26.11.2010, 20:26

willkommen im forum.
steht in der konsole dass die datei nicht geladen werden kann?
das bild muss in dem ordner in dem die exe ausgeführt wird liegen.

C-/C++-Quelltext

1
sprite.SetSubRect(sf::IntRect(10, 10, 80, 80));

die methode brauch man um teile des bilds auszublenden(z.b. für animationen). du wolltest vermutlich die funktionen von SetPosition bzw. SetScale nutzen.
nehm die zeile einfach mal raus.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

3

26.11.2010, 20:39

willkommen im forum.
steht in der konsole dass die datei nicht geladen werden kann?
das bild muss in dem ordner in dem die exe ausgeführt wird liegen.

C-/C++-Quelltext

1
sprite.SetSubRect(sf::IntRect(10, 10, 80, 80));

die methode brauch man um teile des bilds auszublenden(z.b. für animationen). du wolltest vermutlich die funktionen von SetPosition bzw. SetScale nutzen.
nehm die zeile einfach mal raus.
eben nicht:s
in der Konsole steht nichts, sondern das Programm wird ganz normal geladen mit einem weissen Quadrat den ich rumbewegen kann.
Aber ich will ja mein Bild hin und her bewegen können.
Wenn ich die von dir beschriebene Zeile lösche, dann hab ich nur ein ganz kleines Quadrat wahrscheinlich 1x1 pixel.
und das Bild hab ich schon der .cpp Datei beigelegt und auch der .exe -->beides ohne Erfolg. :(
Wenn ich jedoch meine .exe Datei starten will, gibts ne Fehlermeldung. Und zwar dass ich die Datei libgcc_s_dw2-1.dll brauche.
Brauche ich das wirklich? Verwende ich nicht nur die SFML Bibliothek?
wäre für Hilfe sehr dankbar:)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

4

26.11.2010, 20:49

das bild hat nichts mit der cpp datei zutun. der pfad den du im programm angibst ist i.d.R. relativ zur exe. in visual studio wird die exe beim debuggen standardmäßig im projektordner ausgeführt. kopier das bild in jeden möglichen projektordner(auf der festplatte, nicht in der ide). wenns klappt löschst du bild für bild bis es nichtmehr funktioniert. schon weißt du wo die datein hin gehören.

die .dll hat wohl was mit deinem kompiler zutun. du müsstest sie aufn rechner haben. vermutlich im ordner der/des ide/kompilers. wenn nicht hilft dir sicher deine bevorzugte suchmaschine weiter.

das mit dem subrect liegt daran, dass die sfml einfach weiß zeichnet wenn keine daten vorhanden sind. würde sie gar nicht zeichnen könnte man den fehler bei komplexeren programmen vllt nicht so leicht erkennen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

5

26.11.2010, 21:21

Okay, hab den Fehler gefunden^^
Irgendwie startet mein Programm anders, als wenn ich es über die .exe Datei starte.
Denn über die .exe Datei startet es ganz normal, wenn die dazugehörigen dll's dabei sind.

Mich würde noch interessieren wie man die .exe Datei und die dll's zusammenschweisst,
so dass man am Schluss ein File hat, das man weitergeben kann?

6

26.11.2010, 21:47

Hallo timi19,

die sogenannten Dynamic Link Libraries (DLL's) heißen extra deswegen so, weil man sie gerade nicht in die .exe reinpacken muss. Diese würde sonst sehr groß und man müsste immer die komplette .exe austauschen, wenn eine kleine Änderung vorgenommen wurde. Möchtest du allerdings trotzdem nur eine .exe haben, dann gibt es dafür .lib-Dateien die du statisch mit deinem Projekt linkst. Du trägst sie in den Linker-Einstellungen ein, sorgst dafür, dass dein Linker die .lib-Dateien auch finden kann und fertig.

Gruß
SaRu_

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

7

27.11.2010, 09:31

Wie SaRu schon geschrieben hat, ist es eigentlich nicht wirklich sinnvoll alles nur in eine .exe zu packen. Das hat nicht nur praktische Gründe, teilweise auch rechtliche. Wenn du z.B. eine bibliothek verwendest, die unter der LGPL lizenz steht, darfst du sie nicht so ohne weiteres statisch linken, d.h. in deine .exe datei einbetten. Das hat den Grund, dass die bibliothek austauschbar bleiben muss (also vom user austauschbar).

8

27.11.2010, 13:04

Danke euch allen,

jetzt stehe ich vor einem weiterem Problem und zwar habe ich keine Ahnung, wie ich Gravitation ins Spiel bringe. So, dass eben die Schwerkraft mein Bild oder was auch immer es nach unten zieht.

PS: finde das Forum super:)

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

9

27.11.2010, 13:23

jetzt stehe ich vor einem weiterem Problem und zwar habe ich keine Ahnung, wie ich Gravitation ins Spiel bringe. So, dass eben die Schwerkraft mein Bild oder was auch immer es nach unten zieht.

Das klären wir besser mit dem Gehirn oder in einem neuen Thread :)

PS: finde das Forum super:)

Das ist schön zu hören ;)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

10

27.11.2010, 13:37

und zwar habe ich keine Ahnung, wie ich Gravitation ins Spiel bringe.

kein wunder. ich vermute mal du willst ein jump&run schreiben. das ist ein thema für (weit) fortgeschrittene. versuchs erstmal mit einem spiel mit zielscheiben die du mit der maus treffen musst und dann ein pong-, snake und tetrisclon damit du ein gefühl dafür bekommst. danach kannst du vielleicht an ein jump&run denken.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige