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

1

15.02.2009, 16:01

Lost Devices

Hi

Ich bin gerade dabei das Buch Spieleprogrammierung mit DirectX und C++ durchzarbeiten.

Nun ist die Sache mit dem Lost Devices, mit dem Code unten versucht man ja die Bitmaps wieder in die Surface zu laden.

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
HRESULT display::restore()
    {
    HRESULT hr;
    int i;
    char fname[20];
    LPDIRECTDRAWPALETTE pal = 0; 

    hr = dsply.GetDirectDraw()->RestoreAllSurfaces();
    if( hr < 0)
        return hr;
    hr = hgrnd->DrawBitmap( "ul_hgrnd.bmp", ultris_nettobreite, ultris_nettohoehe);
    if( hr < 0)
        return hr;
    hr = fldst->DrawBitmap( "ul_feld.bmp", 20, 20);
    if( hr < 0)
        return hr;
    hr = fllst->DrawBitmap( "ul_stein.bmp", 20, 20);
    if( hr < 0)
        return hr;
    hr = prvst->DrawBitmap( "ul_prev.bmp", 15, 15);
    if( hr < 0)
        return hr;
    hr = deckel->DrawBitmap( "ul_adeck.bmp", 240, 100);
    if( hr < 0)
        return hr;

    for( i = 0; i < 10; i++)
        {
        sprintf( fname, "ul_z%d.bmp", i);
        hr = ziff[i]->DrawBitmap( fname, 20, 40);
        if( hr < 0)
            return hr;
        }
    return S_OK;
    }


Aber diese Zeile ist mir nicht Klar:

C-/C++-Quelltext

1
2
     LPDIRECTDRAWPALETTE pal = 0; 
   hr = dsply.GetDirectDraw()->RestoreAllSurfaces();

2

15.02.2009, 16:08

Zitat von »"MSDN"«

This method restores all the surfaces created for the DirectDraw object, in the order they were created.

Was genau ist dir nicht klar?
Das Warum, die Funktionsweise?
fka tm

3

15.02.2009, 16:10

Wieso brauche ich diese Zeile: dsply.GetDirectDraw()->RestoreAllSurfaces();

Ich stelle die Surfaces ja durch diese Zeilen wieder her:
hr = fldst->DrawBitmap( "ul_feld.bmp", 20, 20);

4

15.02.2009, 16:30

Gehört DrawBitmap zu DirectDraw?
Konnte dazu auf die Schnelle nichts finden.
fka tm

Anonymous

unregistriert

5

15.02.2009, 16:31

TM
Natürlich nicht!

6

15.02.2009, 16:35

Ich hab noch vier zusätzliche Dateien

->ddutil.cpp
->ddutil.h
->dsutil.cpp
->dsutil.h

Arbeitet ihr auch mit denen oder ist das ein Tick des Authors?

7

15.02.2009, 16:49

Afaik sind diese (Supplemental-) Dateien von Microsoft.

Hab mir mal DrawBitmap in ddutil.cpp angeschaut.

Codeausschnitt:

C-/C++-Quelltext

1
2
3
// Make sure this surface is restored.

    if( FAILED( hr = m_pdds->Restore() ) )
        return hr;


Das interpretiere ich so, dass du dir RestoreAllSurfaces tatsächlich sparen kannst.
Probieren geht über Studieren!?
fka tm

8

15.02.2009, 16:52

Ja stimmt - danke

Werbeanzeige