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

Anonymous

unregistriert

1

15.09.2005, 17:25

prüfen ob man aus dem programm drausen ist

wie kann man prüfen, ob jemand aus dem programm rausgeht und wieder reingeht.
Denn ich bekomme immer einen schwarzen bildschirm und müsste alles neu laden. wenn es noch eine andere möglichkeit gibt bitte sagen!
danke.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

15.09.2005, 17:30

auf gut Deutsch ALT+Tab "Problem"

google dazu mal oder schau dich mal im Forum um

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

3

15.09.2005, 17:39

http://www.germangamedev.de/index.php?site=article&id=9

ALT+TAB is not a problem, it is a realy feature ;) Zurecht!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

15.09.2005, 19:04

Geht doch alles viel einfach :)
Was jetzt kommt ist Geschmackssache und nicht umbedingt die Ideallösung:
Ein Fenster bekommt von Windows immer mitgeteilt ob es aktiviert oder deaktiviert wird, dies muss man nur weiter leiten an die Nachrichten Verarbeitungsschleife.

C-/C++-Quelltext

1
2
3
4
5
6
        case WM_ACTIVATE:
            if(WParam == WA_INACTIVE)
                PostMessage(NULL, WM_APP+1, true, 0);
            else
                PostMessage(NULL, WM_APP+1, false, 0);
            break;

Dementsprechend in der Schleife:

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
    // Nachrichtenschleife

    while(!bQuit)
    {
        start= timeGetTime();
        // Nachrichten verarbeiten

        while(PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
        {

            TranslateMessage(&Message);
            DispatchMessage(&Message);

            if(Message.message == WM_QUIT || Message.message == WM_DESTROY )
            {
                // Schleife verlassen!

                bQuit = TRUE;
            }
            if(Message.message == WM_APP+1)
                bBreak=Message.wParam;
        }

        if(!bBreak)
        { 
            neu->move(dTime);
            neu->render(dTime);
        }
        else
            Sleep(100);

        finish= timeGetTime();
        dTime = ( finish - start )/1000;        
        if(dTime > 1)
            dTime = 1;
    }

Wie gesagt keine Musterlösung, sondern nur Geschmackssache
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

5

15.09.2005, 19:22

Nox
Einfach, unelegant und zu performancefressend. Wenn dann sollte man es ordentlich angehen ;) So ist das doch nichts Halbes und nichts Ganzes

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

15.09.2005, 19:49

Performance fressend? Oo unelegant; darüber lässt sich streiten aber Performance fressend, dass leuchtet mir jetzt nicht ein :rolleyes:
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Anonymous

unregistriert

7

16.09.2005, 08:53

hm, muss man einfach nur das D3D Fenster neu initialisiren(mit der create funktion) oder muss man Texturen usw. auch neu laden?


cya

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

16.09.2005, 10:08

Wenn du das Interface neu machst müsste der Rest auch neu gemacht werden. Das fällt bei mir weg, da ich erst garnicht verliere ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

16.09.2005, 11:41

Zitat von »"Anonymous"«

hm, muss man einfach nur das D3D Fenster neu initialisiren(mit der create funktion) oder muss man Texturen usw. auch neu laden?
cya

Sobald Du merkst, dass das Direct3D-Device "lost" ist (rufe dazu IDirect3DDevice9::TestCooperativeLevel auf, wenn der Rückgabewert D3DERR_DEVICELOST ist, ist es soweit), lässt Du die Anwendung erstmal ruhen. Das heißt: Spiel pausieren, die Spielschleife nur mit Sleep machen, damit die anderen Programme die (fast) volle CPU-Zeit nutzen können.
Hin und wieder solltest Du erneut den Rückgabewert von IDirect3DDevice9::TestCooperativeLevel prüfen. Sobald er D3DERR_DEVICENOTRESET ist, heißt das, dass der Benutzer wieder zu Deiner Anwendung zurückwechseln möchte. Dann kannst Du weitermachen.
Jetzt musst Du alle Direct3D-Ressourcen "releasen", die nicht mit D3DPOOL_MANAGED erzeugt wurden. D3DX-Effekte müssen auch freigegeben werden.
Wenn Du das gemacht hast, rufst Du IDirect3DDevice9::Reset auf. Wenn das funktioniert hat, ist das Direct3D-Device wieder funktionsfähig. Nun musst Du alle zuvor freigegebenen Ressourcen wieder neu laden. Das war's.

Anonymous

unregistriert

10

17.09.2005, 04:12

funktioniert perfect" :wirbel:

danke

Werbeanzeige