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

LEVIATHAN

Frischling

  • »LEVIATHAN« ist der Autor dieses Themas

Beiträge: 13

Wohnort: Wuppertal

  • Private Nachricht senden

1

19.11.2004, 09:15

Text langsam ausblenden

Hallo!

Ich möchte einen Text nach einer bestimmten Zeit bzw. nachdem man eine Taste gedrückt hat, langsam ausblenden.

Gehen wir also von dem einfachsten Fall aus: zwischen BeginScene und EndScene ist nur ein Eintrag.

C-/C++-Quelltext

1
2
3
4
5
6
  if(SUCCEEDED(g_pD3DDevice->BeginScene())) 
  {
    g_pFont->DrawText(NULL, "blabla", -1, &rc, 0, D3DXCOLOR( 1.0f, 0.0f, 0.0f, 1.0f ));

    g_pD3DDevice->EndScene();
  }


Wie schaffe ich es sagen wir mal nach 10 Sekunden den Text nun langsam (z.B. innerhalb von 2 Sek.) auszublenden?

mfg

2

19.11.2004, 12:45

Du könntest z.B. mit tbDelay 10 Seks. warten, dann den Text etwas dunkler neu zeichnen(natürlich mit anderer Farbe), dann bissle warten(je nachdem in wievielen Stufen der Text ausgebelndet werden soll) und das halt bis der Text ausgeblendet ist machen(Die Farbveränderung halt dem Hintergrund anpassen).

LEVIATHAN

Frischling

  • »LEVIATHAN« ist der Autor dieses Themas

Beiträge: 13

Wohnort: Wuppertal

  • Private Nachricht senden

3

19.11.2004, 14:25

Was ist denn tbDelay? Kannst Du mal bitte eine compilefähige Codezeile dazu schreiben?
Danke.

4

19.11.2004, 16:32

Oh. Ich dacht irgendwie du benutzt TriBase. Naja, hier ist der Code von:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
int tbDelay(DWORD dwDuration)
{
    DWORD dwEndTime;

    dwEndTime = timeGetTime() + dwDuration;
    while(timeGetTime() < dwEndTime) {}

    return 0;
}

Volrath

Frischling

Beiträge: 14

Beruf: Student Informatik

  • Private Nachricht senden

5

20.11.2004, 11:06

Du verwendest doch für die Textfarbe 4 Kanäle, also auch einen Alphakanal. Könnte man nicht den Alphakanal langsam von 1.0 auf 0.0 absenken. Ich denke mal du bekommst in der Render Methode ja eine Zeit seit dem letzen Aufruf übergeben, oder ?

Dann würde sowas vielleicht gehen :

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static fTimeAccu = 0.0;
float fTime // Zeit seit dem letzten Rendern in ms

float fDuration = 500; // So lange dauert es bis der Text verschwindet


fTimeAccu += fTime;
if (fTimeAccu < fDuration)
  float fAlpha = 1.0 -  (fTimeAccu/fDuration);
else
  fAlpha = 0;

if(SUCCEEDED(g_pD3DDevice->BeginScene())) 
{ 
    g_pFont->DrawText(NULL, "blabla", -1, &rc, 0, D3DXCOLOR( 1.0f, 0.0f, 0.0f, alpha));

    g_pD3DDevice->EndScene(); 
  } 
}


Das ist natürlich nicht ausgereift, aber so von der Idee her könnte es gehen. Du musst das Ganze natürlich noch irgendwo auslösen, sonst beginnt der Text gleich bei Programmstart zu verschwinden.

6

20.11.2004, 11:45

vllt. klappts ja so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static fTimeAccu = 0.0;
float fTime // Zeit seit dem letzten Rendern in ms

float fDuration = 500; // So lange dauert es bis der Text verschwindet


if(WasButtonPressed[TB_KEY_<hier sonst was>]
{
fTimeAccu += fTime;
if (fTimeAccu < fDuration)
  float fAlpha = 1.0 -  (fTimeAccu/fDuration);
else
  fAlpha = 0;
}

if(SUCCEEDED(g_pD3DDevice->BeginScene()))
{
    g_pFont->DrawText(NULL, "blabla", -1, &rc, 0, D3DXCOLOR( 1.0f, 0.0f, 0.0f, falpha));

    g_pD3DDevice->EndScene();
  }
} 

LEVIATHAN

Frischling

  • »LEVIATHAN« ist der Autor dieses Themas

Beiträge: 13

Wohnort: Wuppertal

  • Private Nachricht senden

7

20.11.2004, 17:30

Danke für eure Anregungen. Ich werde die Beispiele ausprobieren.

Werbeanzeige