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

T-VIRUS

Alter Hase

  • »T-VIRUS« ist der Autor dieses Themas

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

31

10.05.2006, 15:01

Jo bestimmt :)
Ich hab zwar erst angefangen aber trotzdem lese ich mein Buch fleißig und versuche alles soweit wie möglich nach zuvoll ziehen ;)

Wird alles noch ;)
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

T-VIRUS

Alter Hase

  • »T-VIRUS« ist der Autor dieses Themas

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

32

10.05.2006, 16:29

Okay ich hab jetzt mal alles versucht aus dem Buch durchzublicken aber irgend wie geht der Code nicht :(

Ich hab mal versucht zugucken wo die Initalisierung ist, hab sie ja gefunden aber er stürtzt immer noch ab :(

Hier mal der Coder der neuen Inisalisierungsmethode:

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
40
41
42
43
44
45
46
void CEngine::InitAll()
{
 // this function is where you do all the initialization 

// for your game


// create object and test for error

if (DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL)!=DD_OK)
   PostMessage(main_window_handle, WM_DESTROY,0,0);

// set cooperation level to windowed mode normal

if (lpdd->SetCooperativeLevel(main_window_handle,
           DDSCL_ALLOWMODEX | DDSCL_FULLSCREEN | 
           DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT)!=DD_OK)
    PostMessage(main_window_handle, WM_DESTROY,0,0);

 // set the display mode

 if (lpdd->SetDisplayMode(SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_BPP,0,0)!=DD_OK)
    PostMessage(main_window_handle, WM_DESTROY,0,0);

 // Create the primary surface

 memset(&ddsd,0,sizeof(ddsd));
 ddsd.dwSize = sizeof(ddsd);

 // set the flags to validate both the capabilities 

 // field and the backbuffer count field

 ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;

 // we need to let dd know that we want a complex 

 // flippable surface structure, set flags for that

 ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP |
                      DDSCAPS_COMPLEX;

 // set the backbuffer count to 1

 ddsd.dwBackBufferCount = 1;

 // create the primary surface

 lpdd->CreateSurface(&ddsd,&lpddsprimary,NULL);

 // query for the backbuffer or secondary surface

 // notice the use of ddscaps to indicate what 

 // we are requesting

 ddscaps.dwCaps = DDSCAPS_BACKBUFFER;

 // get the surface

 lpddsprimary->GetAttachedSurface(&ddscaps,&lpddsback);
}


Hier die Game Methode:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//Spielteil:

void CEngine::MainGame()
{
// this is the workhorse of your game it will be called

// continuously in real-time this is like main() in C

// all the calls for you game go here!


UCHAR *back_buffer = NULL, // used to draw

      *dest_ptr    = NULL, // used in line by line copy

      *src_ptr     = NULL; // " "


// check of user is trying to exit

if (KEY_DOWN(VK_ESCAPE) || KEY_DOWN(VK_SPACE))
    PostMessage(main_window_handle, WM_DESTROY,0,0);

// erase secondary back buffer

memset(&ddsd,0,sizeof(ddsd)); 
ddsd.dwSize = sizeof(ddsd);

// lock the secondary surface

lpddsback->Lock(NULL,&ddsd, 
              DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL);

// get video pointer to secondary surface

back_buffer = (UCHAR *)ddsd.lpSurface;     

// clear back buffer out


// linear memory

if (ddsd.lPitch == SCREEN_WIDTH)
    memset(back_buffer,0,SCREEN_WIDTH*SCREEN_HEIGHT);
else
   {
   // non-linear memory

   
   // make copy of video pointer

   dest_ptr = back_buffer;

   // clear out memory one line at a time

   for (unsigned int y=0; y<SCREEN_HEIGHT; y++)
       {
       // clear nect line

       memset(dest_ptr,0,SCREEN_WIDTH);
       
       // advance pointer to next line

       dest_ptr+=ddsd.lPitch;

       } // end for y


   } // end else


// perform game logic...

       
// draw the next frame into the secondary back buffer

// plot 5000 random pixels

for (unsigned int index=0; index<5000; index++)
    {
    int   x   = rand()%SCREEN_WIDTH;
    int   y   = rand()%SCREEN_HEIGHT;
    UCHAR col = rand()%256;
    back_buffer[x+y*ddsd.lPitch] = col;
    } // end for index


// unlock secondary buffer

lpddsback->Unlock(NULL);

// flip pages

if(lpddsprimary->Flip(NULL, DDFLIP_WAIT)!=DD_OK)
PostMessage(main_window_handle, WM_DESTROY,0,0);
}
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

33

10.05.2006, 17:05

Verstehst Du, was der Code bedeuten soll?
...ich meine, weil Du englische Kommentare verwendet bzw. übernommen hast...

T-VIRUS

Alter Hase

  • »T-VIRUS« ist der Autor dieses Themas

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

34

10.05.2006, 18:38

Ja schon nur weiß ich nicht genau wo der Fehler liegt :(
Ich werd mich jetzt mal ransetzen und mir ein paar notizen machen damit ich den Überblick nicht mehr verliere :)

Okay ich scheine immer noch den selben Fehler zumachen :(
Nochmal zu meiner Sicherheit!

Kann jemand mal ein gutes Beispiel zeigen wie man eine Sekundäre Oberfläche erstellt?

Den ich hänge da irgend wie :( eine Erklärung wäre sehr nett :)
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

T-VIRUS

Alter Hase

  • »T-VIRUS« ist der Autor dieses Themas

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

35

11.05.2006, 14:49

Okay ich hab den Code mal mit einem Funktionierendem Back Up geprüft aber der Code ist gleich :(
Weiß jemand wo der Fehler sonst sein kann???
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

36

11.05.2006, 17:14

Kennst du dich schon mit dem Debugger aus?
Wenn nicht eine kurze Einführung:
Der Debugger ermöglicht es, dass man das Programm an einer bestimmten Stelle anhält und sich die Werte der Variablen zu diesem Zeitpunkt ansehen kann.

Dies kann man erreichen indem man dem Programm sagt in welcher Zeile des Progamms er anhalten soll. Dazu geht man in die entsprechende Zeile und setzt in dieser einen Haltepunkt. Den kann man per F9 setzen. Wenn man nun das Programm startet und es an dieser Zeile vorbei kommen sollte, hält es bei der Stelle an und man kann sich die Werte der Vars zu diesem Zeitpunkt nun per Schnellüberwachung oder einfaches halten des Mauszeigers über den Variablennamen ansehen.
Dannach kann man per F5 das Programm weiter machen lassen.
Jedoch kommt es schon mal vor, dass man z.B. die Zeile sucht, wo genau das Programm abstürzt oder man will den Wert einer Variable über mehrere Schritte überschauen. Man muss dafür zum Glück nicht für jede Stelle einen Haltepunkt setzen sondern kann per F10 immer einen Schritt weiter im Programm gehen. Jedoch kann es bei der Hilfesuche hilfreich sein auch in eine Methode oder Funktion reinzuspringen, wenn z.B. in dieser der Fehler auftritt und man diesen weiter eingrenzen will. Dazu nutzt man die F11 Taste. Diese ist von der Funktion die gleiche wie die F10 jedoch mit dem Zusatz, dass man damit auch noch in die Funktionen reinspringen kann.

Ich hoffe diese kleine Einführen hilft dir und du wirst die Funktion fleißig nutzen, denn damit lassen sich viele Fehler im Vorfeld finden.
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.

T-VIRUS

Alter Hase

  • »T-VIRUS« ist der Autor dieses Themas

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

37

11.05.2006, 17:26

Ich hab den Debugger schon solange nicht benutzt das ich ihn vergesen hab :( ich werd mal gucken was er sagt ;)
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

38

11.05.2006, 18:28

Sehe gerade, eigentlich wäre das ja was fürs FAQ sodass man einfach nur noch den Link schicken muss ^_^
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.

T-VIRUS

Alter Hase

  • »T-VIRUS« ist der Autor dieses Themas

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

39

11.05.2006, 18:53

Jo ;)

Okay da ich mit C++ eher scheitere werde ich zum lernen von DirectX erstmal in C und später wenn ich es gut behersche in C++ programmieren :)

Natürlich werde ich obrige fehler vermeiden :)

Aber ich Code grade was neues und zwar soll es eine Log Klasse werden hier mal der bisherige Code:

main.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;

#include "CLog.h"

int main()
{
    CLog Logger;
    Logger.LogStart();
    Logger.MakeEntry("--Alles funktioniert!!!--");
    Logger.LogEnd();
    system("PAUSE");
    return EXIT_SUCCESS;
}


CLog.h

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
#ifndef CLog_H
#define CLog_H

// Standard-Includes

#include <iostream>
#include <fstream.h>

/*
=========================================================================================
==Diese Klasse soll alle Fehler aufzeichnen!!!
==Das Funktioniert natürlich über ofstream!!!
=========================================================================================
*/

//Template für die Ausgaben Typen!

template <class T>

class CLog
{
public:
       
CLog();
~CLog();
       
//Standart Start und End Logs schreiben:

void LogStart();
void LogEnd();

void MakeEntry(T LogEntry);

private:

//Name für die Datei:

char* m_pFileName;
        
static ofstream Log;
};

#endif //CLog_H


CLog.cpp

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
#include "CLog.h"

ofstream CLog::Log;

CLog::CLog()
{
}

CLog::~CLog()
{
}

void CLog::LogStart()
{
 MakeEntry("--Log Beginnt!--");
}

void CLog::MakeEntry(T LogEntry)
{
 Log<<LogEntry<<"\n";
}

void CLog::LogEnd()
{
 MakeEntry("--Log Beendet!--");
}


Leider gibts es noch einige Fehler :( hoffe das ich die bald entfernt habe ;)

Zur Klasse:
Sie soll einfach nur alle Nachrichten Loggen damit ich später sehen kann ob oder wo ein Fehler in meinem Spiel/Programm ist.

Es soll also nur mit ofstream einfach alles in eine .txt packen was ich als MakeEntrys eingebaut habe :)

Simpel aber für mich sehr einfach und sehr nützliche ;D da meine Programme häufig abschmieren wie man merkt :p
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

40

11.05.2006, 18:58

Also ist C wirklich leichter zu lernen als C++? Kommt man dann später nicht mal durcheinander?

Werbeanzeige