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

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

11

08.05.2006, 18:40

Das hat was mit Namensbereichen zu tun.

Er sagt dadurch das es im "globalen" Namensbereich liegt. Wenn er das wegnehmen würde, könnte es auch im aktuellen Bereich liegen.

Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
inline int f (int x) { return x; }
namespace core
{
    inline int f (int x) { return x*x; }

    inline int f2(int x) { return f(x); }
}


Man beachte: die eine Funktion berechnet das Quadrat, die zweite gibt einfach nur den Wert zurück. Wenn wir jetzt wie da oben nur f(x) im Rumpf der Funktion f2 stehen haben, wissen wir nicht wirklich aus welchen Namensbereich nun das f(x) genommen wird. Wenn wir aber einen :: davor schreiben, dann meinen wir den globalen Namensraum, sonst den lokalen. Verwechslungen sind somit ausgeschlossen. Wieder eine Fehlerursache weniger.

Das andere (mit den Zeigern[*] und so) ist letztendlich zur Veranschaulichung geeignet, da man direkt sieht das es sich um einen Zeiger handelt. Ausserdem sieht es "intelligenter" aus ;).

ext

Treue Seele

  • Private Nachricht senden

12

08.05.2006, 18:50

Die Chance, dass eine 3rd Party Bibliothek/Anwendung unter einem Windows-Betriebssystem gleiche Bezeichner verwendet wie die Winapi tendiert gegen 0.

Wenn man nicht gerade mit der MFC (und da auch nur für Funktionen) arbeitet, kann man sich das auch sparen. Aber muss jeder selber wissen ob man dann in dem unwarscheinlichen Fall ein :: davor setzt oder es pauschal macht..

Und zu deiner ursprünglichen Frage, verwende HINSTANCE und nicht HINSTANCE__* oder HWND__*
Wieso: Schau dir die WinAPI-Funktionen an und richte dich danach was die benutzen und die verwenden HINSTANCE und HWND

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

13

08.05.2006, 18:52

Alles klar :) merk ich mir ;)
Meine Blog:)

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

MFG T-VIRUS

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

14

08.05.2006, 18:54

Das ist das gleiche (define siehe windows.h). Es wird die Funktionsweise aber viel deutlicher, da du sieht das es ein Pointer ist. Dir wird so auch klar warum du Objekte und Geräteschnittstellen freigeben musst, eben weil die den Speicher freigeben musst.

Das mit den Bezeichnern stimmt sicherlich, aber denk mal in größeren Maßstäben. Wenn dir wirklich mal so ein Fehler passiert, hast du echt zu suchen, das garantier ich dir. Deswegen: Anwenden,, schaden tuts dir nicht, es macht den Code überscihtlicher und (meiner Meinung) auch wesentlich besser lesbarer (da man weiss woher die Funktion stammt) und Fehlerunanfälliger.

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

15

08.05.2006, 18:58

Jo glaub ich schon ;)

EDIT:
Hab mal ein paar seiten wie spieleprogrammierer.de und co auf meiner HP verlinkt ;)

Hoffe die beschreibung stimmt so :)

Meine HP-> http://t-virus.1.de.tl/phpkit/
Meine Blog:)

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

MFG T-VIRUS

ext

Treue Seele

  • Private Nachricht senden

16

08.05.2006, 19:17

Das sind keine Zeiger auf nen Speicher sondern Handles die intern gemappt werden auf den echten Speicherbereich damit man nicht direkt den Speicher einer Ressource manipulieren kann.

Zu der Scope Sache hab ich oben ja geschrieben, dass ich das jedem selbst überlasse.
Unter Umständen kann das gezielte überdecken von Funktionen sogar beabsichtigt sein, wie bei der MFC zum Beispiel.

Anonymous

unregistriert

17

08.05.2006, 19:32

Zitat von »"ext"«

Und zu deiner ursprünglichen Frage, verwende HINSTANCE und nicht HINSTANCE__* oder HWND__*
Wieso: Schau dir die WinAPI-Funktionen an und richte dich danach was die benutzen und die verwenden HINSTANCE und HWND
Ich könnte mal wieder etwas sagen, was den Begriff Abwärtskompatibilität beinhaltet, aber lassen wir das.

Und zum Thema Schönheit: Ich will sehen was ein Pointer ist und was keiner ist.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

18

08.05.2006, 19:55

Jaa richtig es sind Handler, aber ich glaub soweit muss man jetzt nicht ins Detail gehen, weil es einfach nicht wirklich wichtig ist.

ext

Treue Seele

  • Private Nachricht senden

19

08.05.2006, 20:23

Zitat von »"nix da"«

Zitat von »"ext"«

Und zu deiner ursprünglichen Frage, verwende HINSTANCE und nicht HINSTANCE__* oder HWND__*
Wieso: Schau dir die WinAPI-Funktionen an und richte dich danach was die benutzen und die verwenden HINSTANCE und HWND
Ich könnte mal wieder etwas sagen, was den Begriff Abwärtskompatibilität beinhaltet, aber lassen wir das.

Jetzt will ichs wissen, sprich dich aus.

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

20

09.05.2006, 20:24

Okay ich hab jetzt ein Problem!!!
Ich hab den code der letztens noch ging wieder eingespielt aber irgend wie funkt der im Moment nicht :(

Ich werds mal fixen!

Aber ich hab immer noch ein verständnisproblem wie man mit einer Funktion zeichnet :(

z.b. meine MainGame() 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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//Spielteil:

void CEngine::MainGame()
{
     
  // check of user is trying to exit

 if (KEY_DOWN(VK_ESCAPE) || KEY_DOWN(VK_SPACE))
    {
     MessageBox(main_window_handle, "Spiel wurde unterbrochen!", "Spiel wird beendet!", MB_OK);
     PostMessage(main_window_handle, WM_DESTROY,0,0);
    }
     
 // 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!


 USHORT *back_buffer = NULL, // used to draw

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

        *src_ptr     = NULL; // " "


 // 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 = (USHORT *)ddsd.lpSurface;     

 // clear back buffer out, remember in 16bit mode there are

 // 2 bytes per pixel, so watch out for addressing and multiplying

 // issues in this code


 // linear memory

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

   
    // make copy of video pointer

    dest_ptr = back_buffer;

    // clear out memory one line at a time

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

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

        dest_ptr+=(ddsd.lPitch/2);

        } // 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 red   = rand()%256;
     UCHAR green = rand()%256;
     UCHAR blue  = rand()%256;
   
     // back_buffer is a short pointer, BUT lpitch is in bytes

     // so divide by 2, to get number of "pixels" or words

     back_buffer[x+y*(ddsd.lPitch/2)] = _RGB16BIT565(red, green, blue);
     } // end for index


 // unlock secondary buffer

 lpddsback->Unlock(NULL);

 // flip pages

 if(lpddsprimary->Flip(NULL, DDFLIP_WAIT)!=DD_OK)
 {
  MessageBox(main_window_handle,"Es gab einen Fehler beim flippen!", "Flipping Fehler!",MB_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

Werbeanzeige