Hallo Leute,
ich habe ein Problem. Ich möchte gerne ein kleines Spiel schreiben und bin gerade dabei alles aufzuziehen. Das MainWindow geht schon mal und man kann etwas auswählen usw.
Bisher habe ich für diese anzeige immer Schriften genommen, jetzt möchte ich das ganze aber Umbauen damit da Buttons sind. Bisher hat sich die Farbe und die größe der schrift verändert wenn man darüber fuhr und wenn man mit der Maus klickte dann kam man (bisher) in das CreditsFenster oder man konnte das Spiel beenden, soweit so gut. Jetzt dachte ich mir "Ok baust das ganze mal um das da Buttons sind die ihre Farbe verändern wenn man mit der Maus drüber fährt". So habe mir mal schnell einen Button gebaut mit 2 versch. posis, einmal wenn man nicht darüber ist mit der maus und einmal wenn man mit der Maus darüber ist.
so nun wollte ich das ganze meinem ObjectManager mitteilen das er doch bitte jetzt anstelle des Textes ein SpriteObject laden soll und kein TextObject mehr. So jetzt baue ich mir mein Sprite Object zusammen und will es in den ObjectManager laden. Das ganze lässt sich auch anlegen und ist in der ObjectListe vorhanden nur das Bild bleibt weiß. Generell funkt das ganze auch mit der Maske und allem habe das mal schnell in einem ExtraProjekt getestet. Ich weiß einfach nicht wie ich weiter machen soll.
Ich habe dann was gelesen das ich die Referenz oder einen Pointer auf das Image übergeben soll, nur bekomm ich das mit meinem OjkektManager nicht zusammen. Ich muss allerdings gestehen das ich noch nicht sooo der c++ Profi bin ich kann es zwar nur halt nicht perfekt. Ich bin auch so in der Programmierung tätig allerdings PL/SQL und ein bisschen Java und C#.
So hier mal meine Struct plus liste des ObjectManager:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
|
struct GameObjectList
{
int ID;
std::string szName;
GameObjectState GameState;
GameObjectGroup ObjectGroup;
GameObject ObjectInstance;
};
std::list<GameObjectList> ObjectList;
|
so wenn ich nun ein Object übergeben will dann rufe ich die Funktion dafür im ObjectManager auf:
|
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
|
bool ObjectManager::AddObject(std::string i_szName,
GameObjectState i_GameState,
GameObjectGroup i_GameObjectGroup,
GameObject i_ObjectInstance)
{
int ObjectId = 0;
try
{
ObjectId = GetNextObjectId();
GameObjectList GameObject;
GameObject.GameState = i_GameState;
GameObject.ID = ObjectId;
GameObject.ObjectGroup = i_GameObjectGroup;
GameObject.ObjectInstance = i_ObjectInstance;
GameObject.szName = i_szName;
ObjectList.push_front(GameObject);
return LIST_SUCESS;
}catch(int ex)
{
return LIST_FAILED;
}
}
|
Hier noch die Struct für das GameObject
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
|
struct GameObject
{
float height;
float wide;
sf::String StringObject;
sf::Sprite SpriteObject;
sf::Image ImageObject;
};
|
So jetzt rufe ich die Funktion AddObject so auf (dies ist mal für Text)
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
ObjectManager::GameObject v_GameObject;
sf:String PrintString;
sf:Sprite PrintSprite;
// Begin to Load Objects
PrintString.SetColor(sf::Color(255,0,0));
PrintString.SetText(sf::Unicode::Text("Welcome to 2D Paschln"));
PrintString.SetPosition(190.00f, 50.00f);
PrintString.SetSize(40.00f);
//Add to List
v_GameObject.ImageObject = PrintImage;
v_GameObject.SpriteObject = PrintSprite;
v_GameObject.StringObject = PrintString;
// Push to List
m_ObjectManager->AddObject("MAINMENU_TITEL", ObjectManager::GameMainWindow, ObjectManager:StringObject, v_GameObject);
|
Ich lege also ein Object mit dem Name "MAINMENU_TITEL" an. Diese Object werden dann durch diese Funktion in das RenderWindow geladen:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
bool ObjectManager::LoadObjectInWindow(ObjectManager::GameObjectState i_GameState, sf::RenderWindow *m_Window)
{
for(std::list<GameObjectList>::iterator it = ObjectList.begin(); it != ObjectList.end(); ++it)
{
if(it->GameState == i_GameState)
{
m_Window->Draw(it->ObjectInstance.SpriteObject);
m_Window->Draw(it->ObjectInstance.StringObject);
}
}
return LIST_SUCESS;
}
|
Das ImageObject habe ich nicht drinne das geht so leider nicht.
naja das Problem ist das die Texte zwar gezeigt werden aber das Bild bleibt weiß. Was muss ich den machen damit das Funktioniert?
Ich brauche da einen Denkanstoß.
Würde mich freuen wenn mir einer Helfen könnte.
lg
Christoph