Hallo zusammen,
mich Quält jetzt schon seit längerer Zeit eine Frage zu einem Resourcenmanager und dem Handling mit diesen, in Bezug auf sf::Image, sf:
prite. Es klappt zwar bei mir aber ein gewisser Punkt will mir nicht ganz einleuchten und ich denke irgendwo mache ich in meinem Code noch einen Fehler. Ich erklär es am besten mal mit den dazupassenden Codeausschnitten.
|
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
|
#ifndef IMAGEMANAGER_HPP
#define IMAGEMANAGER_HPP
#include <SFML\Graphics.hpp>
#include <string>
#include <map>
class c_ImageManager
{
private:
std::map < std::string, sf::Image > ImageMap;
std::map < std::string, sf::Image >::iterator im;
public:
sf::Image get_image(const std::string &data)
{
im = ImageMap.find(data);
if ( im == ImageMap.end() )
{
sf::Image load;
im = ImageMap.insert ( std::make_pair ( data, load ) ).first;
if ( !im->second.LoadFromFile(data) )
{
}
}
return im->second;
}
void Release_Image(const std::string &data);
void Release_All_Images();
};
#endif IMAGEMANAGER_HPP
|
Hier erstelle ich den RescourcenManager, wo ich mir nicht ganz sicher bin ob das alles so passt, aber weiter gehts.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
class c_framework
{
public:
c_ImageManager imanag;
}
|
In dieser Klasse erstelle ich den ImageManager den ich dann zusammen mit dem Framework Header rumreiche.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
class c_mineshaft_01_battle
{
private:
c_framework &framework;
}
|
In der Klasse wo ich den Image Manager verwenden will habe ich dann eine Referenz auf das Framework.
|
C-/C++-Quelltext
|
1
2
3
4
|
c_mineshaft_01_battle::c_mineshaft_01_battle(c_framework &framework) : framework (framework)
{
}
|
Welches mit der Intilisierungsliste mit dem Framework verknüpft wird.
|
C-/C++-Quelltext
|
1
2
3
4
|
sf::Image &Image = framework.imanag.get_image("background.png");
sf::Sprite background(Image);
background.SetPosition(0.f, 0.f);
|
Wenn ich dann das Image wie hier aufgeführt verwende klappt alles und so läuft das Programm auch tadellos. Was mir dabei aber nicht sonderlich gefällt ist, das ich zuerst eine Referenz Image erstellen muss und das dann erst an das Sprite zu übergeben.
|
C-/C++-Quelltext
|
1
2
3
|
sf::Sprite background(framework.imanag.get_image("background.png"));
background.SetPosition(0.f, 0.f);
|
oder
|
C-/C++-Quelltext
|
1
2
3
4
5
|
sf::Sprite background;
background.SetImage(framework.imanag.get_image("background.png"));
background.SetPosition(0.f, 0.f);
|
Wenn ich es dann auf eine dieser beiden Varianten Probiere, erhalte ich nur ein weißes Sprite. Meine Frage ist jetzt nun, warum ist das so, warum klappt es über das Referenz Image, wenn ich es aber gleich zuweiße geht es nicht. Bzw. was müsste ich Ändern damit das auch Funktioniert, wo habe ich da einen Denkfehler in meinem Code? Ich komme zwar mit der andere Variante auch einigermaßen Zurecht aber sie hat mir bis jetzt doch einiges Schwieriger gemacht.
Da ich auf Arbeit bin kann ich bei evtl. Fragen wahrscheinlich erst heute Abend antworten. Aber Hoffe ich habe es ausführlich genug erklärt.