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

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

21

15.02.2012, 20:25

DAS schaffst du jedenfalls nicht mit dem Präprozessor.
Du lädst das Image ein mal im Vektor.
Du darfst sonst nirgens eine Definitionen wie "sf::Image m_Image_Ball_Red;" haben, weil das ein neues Image wäre.
Dagegen sind Deklarationen und Definition von Referenzen auf sf::Image "erlaubt". Z.B. "sf::Image ℑ".
Referenzen benötigst du um das Image z.B. an den Konstruktor zu übergeben.
Im Konstruktor rufst du dann m_Sprite_Ball.SetImage(image); auf und fertig.
"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?

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

22

15.02.2012, 21:53

also baue ich jetzt die Präprozessor Sachen wieder aus 0o?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

23

15.02.2012, 22:00

Jop.
Mach doch in deine Ressourcen Klasse eine std::map<std::string, sf::Image>. Dann holst du dir per Bildname dein Image. Die Klasse entscheidet dann, ob dein Bild bereits geladen wurde (also sofern es bereits in der map existiert) wenn ja: Referenz darauf zurückgeben, wenn nicht: Bild laden, speichern und Referenz darauf zurückgeben.
Glaube das wäre nun die einfachste und schnellste Lösung für dein Dilemma.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

24

15.02.2012, 22:06

Und eine sinnvolle und häufig verwendete noch dazu.

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

25

16.02.2012, 09:00

Ich habe bis jetzt noch nicht mit std::map gearbeitet und weis leider nicht wie ich Prüfen soll das dass Image schon geladen wurde würde mich um ein Tipp sehr freuen.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <SFML/Graphics.hpp>
#include <map>
#include "CRessorcen.hpp"

CRessorcen::CRessorcen ()
{
    m_Image_Ball_Yellow.LoadFromFile ("gfx/Balls/Yellow.png");
    m_mMap["Ball_Yellow"] = m_Image_Ball_Yellow;

    m_Image_Ball_Blue.LoadFromFile ("gfx/Balls/Blue.png");
    m_mMap["Ball_Blue"] = m_Image_Ball_Blue;

    m_Image_Ball_Red.LoadFromFile ("gfx/Balls/Red.png");
    m_mMap["Ball_Red"] = m_Image_Ball_Red;
}


CBall.cpp (Draw)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Ball draw
    switch (m_Farbe)
    {
        case Yellow:
        {
            m_Sprite_Ball.SetImage (m_Ressorcen.GetImage ("Ball_Yellow"));
        } break;

        case Blue:
        {
            m_Sprite_Ball.SetImage (m_Ressorcen.GetImage ("Ball_Blue"));
        } break;

        case Red:
        {
            m_Sprite_Ball.SetImage (m_Ressorcen.GetImage ("Ball_Red"));
        } break;
    }


PS:

Zitat

Die Klasse entscheidet dann, ob dein Bild bereits geladen wurde

Oder kann es sein das ich nichts mehr prüfen muss sondern die Klasse es Automatisch prüft?

MFG:
Raidenkk

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Raidenkk« (16.02.2012, 09:14)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

26

16.02.2012, 10:12

Mit map.find()

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

27

16.02.2012, 11:22

brauche ich dafür ein iterator oder gibt es was spezielles für map?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

28

16.02.2012, 11:29

Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

29

16.02.2012, 12:09

Warum soll ich eigentlich prüfen ob die Farbe schon existiert? jedesmal wenn eine Kugel gespawnt wird. Wird der Konstruktor nur 1 mal aufgerufen und da bei jeder Kugel "CRessorcen m_Ressorcen;" erstellt wird ist das doch für Nüsse oder nicht? also ob ich nun prüfe ob die Farbe schon existiert oder nicht wird trotzdem pro kugel 1x CRessorcen m_Ressorcen; erstellt und somit wieder 3 images geladen.

EDIT:
Bei 2 Kugeln sind es 6 Images bei je 3 Farben

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Raidenkk« (16.02.2012, 12:17)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

30

16.02.2012, 12:21

Hmm, versteh ich jetzt nicht ganz: Wieso werden 3 Images erstellt und wie?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige