Also ich glaub mit code kann man hier nicht so viel anfangen. Sonst müsste ich das ganze Spiel posten.
Aber Initialisieren, Rendern und Löschen hab ich so gemacht:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
m_pEffect=NULL;
if (FAILED(D3DXCreateEffectFromFile(g_pD3DDevice,"Data\\Effect.fx",
NULL,NULL,0,NULL,&m_pEffect,NULL)))
{
return E_FAIL;
}
//------------------------------------------------------------------------------
UINT uiPasses;
m_pEffect->Begin(&uiPasses,0);
m_pEffect->BeginPass(0);
//etwas rendern
m_pEffect->EndPass();
m_pEffect->End();
//------------------------------------------------------------------------------
if (m_pStatusTextEffect!=NULL) m_pStatusTextEffect->Release();
|
Und SetGameState():
|
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
|
HRESULT CPacman::SetGameState(EGameState NewGameState)
{
HRESULT r = S_OK;
// Alten Spielzustand entladen
switch(m_GameState)
{
case GS_MAINMENU: m_pMainMenu->Exit(); break;
case GS_GAME: m_pGame->Exit(); break;
}
// ------------------------------------------------------------------
// Zeit zurücksetzen
g_fTime = 0.0f;
m_pStateBlock->Apply();
// Neuen Spielzustand laden
m_GameState = NewGameState;
switch(m_GameState)
{
case GS_MAINMENU: r = m_pMainMenu->Init(); break;
case GS_GAME: r = m_pGame->Init(); break;
}
return r;
}
|
So benutz ich Effekte immer. Aber das seltsame ist, dass nur bei Release() von Effekten das Spiel abstürzt. Und man wechselt ja u. U. öfters ins Hauptmenü bzw. Spiel.
Was allerdings funktioniert, ist, die CGame- und CMainMenu-Effekte und-Schriften in der Hauptspielklasse löscht - was das ganze aber nicht gerade übersichtlich macht. Und ich glaub SetGameState hat auch die Absicht, dass nur der Speicher für einen Spielstand reserviert ist.
???