So hab grad nicht genug Zeit die Sprite-Klasse komplett umzuschreiben, d.h. hier paar Tipps:
- Fehlerbehandlung bzw. Ausgabe nicht in der Datenschicht! D.h. load sollte nen bool zurückgeben und kannst es dann auf entsp. Anwendungsebene verarbeiten!
- Lad mal nen nicht animiertes aber ruf die render-Funktion für nen animiertes Sprite auf.
- Generell hast du viele Funktionen die, wenn sie zu früh aufgerufen werden, undefiniertes Verhalten hervorrufen, da du den Variablen im c-tor keinen Std.-Wert zugewiesen hast!
- Du benutzt sog. Magic-Numbers. Wer soll wissen woher jetzt genau 25 kommt? (
http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.11)
- const und unsigned nutzen
- Guck dir "law of big three" an
(Hättest de jetzt weniger Probleme gehabt ...)
- Strings usw. per const-Ref. übergeben, spart kopiervorgang. Nur primitive Datentypen wie int etc. nicht (mir fällt grad der Name von den Dingern nicht ein
)
|
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
|
#include <sstream>
void CGame::RenderStory(const unsigned int story) const // ref. bei einfachen datentypen sinnfrei, negative id? mehr als 256 storys? ;)
{
// load story text
CSprite spriteIntroText;
LoadStory(story, spriteIntroText);
spriteIntroText.SetColourKey(205, 179, 139);
float y_position(600.f);
while (y_position > -1250.f) // Magic Number? 1247?
{
g_pFramework->Update();
g_pFramework->Clear();
// draw text
spriteIntroText.SetPos(0.f, y_position);
spriteIntroText.Render();
g_pFramework->Flip();
// move text down
y_position -= 25 * g_pTimer->GetElapsed(); // Magic numbers? 25?
// break on escape
SDL_Event event;
if (SDL_PollEvent(&event) &&
(event.type == SDL_KEYDOWN) &&
(event.key.keysym.sym == SDLK_ESCAPE))
break;
}
}
const bool CGame::LoadStory(const unsigned int story, CSprite& rhs) const
{
std::ostringstream ss;
ss << "Data/Emphasis/Story/Story_" << story << ".Emphasis";
return rhs.load(ss.str());
}
|
kann sein das ein Fehler drin ist, hab's nicht getestet.