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

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

1

16.07.2006, 11:08

Variable hat zwei Werte?

Hab ein komisches Problem:

Habe eine Variable erstellt und mit null initialisiert. Dies hat komischer Weise mal den, mal den anderen Wert.

Initialisierung:

C-/C++-Quelltext

1
unsigned long y_move    = NULL;


Aus WndPrc:

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
case WM_KEYDOWN:
        {
            RECT client_rc;

            GetClientRect(hWnd, &client_rc);
            
            switch (wParam)
            {
                case VK_LEFT:
                    if(xpos > client_rc.left)
                    {
                        DrawBackground();
                        x_move  -= speed;
                    }       
                    break;
                case VK_UP:
                    if(ypos > client_rc.top)
                    {
                        DrawBackground();
                        y_move  -= speed;
                    } //Wenn ich bis hier ausführe hat y_move den Wert 4294967289 anstatt 7    

                    break;
                case VK_RIGHT:
                    if(xpos + 20 < client_rc.right)
                    {
                        DrawBackground();
                        x_move  += speed;   
                    }   
                    break;
                case VK_DOWN:
                    if(ypos + 20 < client_rc.bottom)
                    {
                        DrawBackground();
                        y_move  += speed; //Wenn ich bis hier ausführe hat die gleiche Varaible den richtigen Wert 7

                    }   
                    break;
            
                default:
                    return 0;
            }


Dieser Code hat auch noch mit der Variable zu tun:

C-/C++-Quelltext

1
2
xpos    = x_start       + x_move;
ypos    = y_start       + y_move;


An mehr Stellen kommt die Variable im Projekt nicht vor!

Was läuft da falsch?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

16.07.2006, 11:21

öhm y_move ist unsigned!

C-/C++-Quelltext

1
2
3
4
5
                    if(ypos > client_rc.top)
                    {
                        DrawBackground();
                        y_move    -= speed;
                    } //Wenn ich bis hier ausführe hat y_move den Wert 4294967289 anstatt 7


debug mal an der Stelle, ich weiss nicht was und wie groß client_rc.top bzw.
speed ist

ich schau mal schnell bei mir, aber das mit dem unsigned ist böse

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

3

16.07.2006, 11:26

Speed ist mit 7 festgelegt:

C-/C++-Quelltext

1
unsigned long speed     = 7;


client_rc.top ist 0.

Ja, y_move ist unsigned, x_move aber auch und da klappt es ja ?!

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

4

16.07.2006, 11:38

ich find das bei dir sowieso etwas "durcheinander"

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
                case VK_LEFT:
                    // Wenn jetzige Position kleiner als linke kante

                    if(xpos - speed > client_rc.left)
                    {
                        xpos -= speed;
                    }       
                    break;
                case VK_RIGHT:
                    // Wenn XPos + speed kleiner als rechte ecke, dann können wir erhöhen

                    if(xpos + speed < client_rc.right)
                    {
                        xpos += speed;
                    }

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

5

16.07.2006, 11:48

Bei der Variante tut sich gar nichts mehr (keine Bewegung) :( .

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

6

16.07.2006, 11:50

jetzt sag doch mal was genau du machen willst, ich gehe davon aus das xpos und ypos positionen eines Objektes sind und nicht ymove bzw. xmove.


p.s. dran gedacht das xpos bzw. ypos static bzw. global sein müssen? -.-

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

7

16.07.2006, 11:55

xpos und ypos sind die momentane Position der linken oberen Ecke meines quadratischen Objekts, dass per Maustasten über den ganzen Bildschirm (bis zum Rand) manövriert werden können soll.

x_start und y_start sind die Startpositionen meines Objekts.

x_move und y_move sind die Bewegung. Momentan soll sie pro Tastendruck um speed (7) verändert werden.

-> xpos = x_start + x_move
-> ypos = y_start + y_move

Mit meiner ersten Variante hat es auch fast geklappt. Lediglich der obere Rand wurde immer überfahren, da sich der Wert von y_pos bei VK_UP änderte.

EDIT: WUNDER!!! Es klappt!!! Er fährt nicht mehr über den Rand hinaus, aber das Programm hängt sich nach ein paar Sekunden auf.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

8

16.07.2006, 11:59

ich versteh aber nicht, wozu start bzw. move sind, das brauchst du doch gar nicht.

du brauchst doch nur die position des Objektes zu ändern wenn LEFT gedrückt wird, und am Anfang die xpos bzw. ypos auf die Startwerte zu setzen?

xpos bzw. ypos müssen aber global sein bzw. static!!!

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

9

16.07.2006, 12:01

Wenn ich anstatt x_move aber xpos verändere (xpos -= speed) klappt es nicht.

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

10

16.07.2006, 12:02

Was ist wohl 0 - 7 wenn man das Ergebnis in einer UNSIGNED (!) Variable speichert?

MfG
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

Werbeanzeige