Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Lazarus merkwürdiges Verhalten (https://www.delphipraxis.net/179317-lazarus-merkwuerdiges-verhalten.html)

ngott2 26. Feb 2014 10:46

Lazarus merkwürdiges Verhalten
 
Hallo liebe Community,
ich betreue gerade einen Praktikanten der das Spiel vorsicht Kurve programmiert.

Er will zwei Powerups beim start erstellen. Er hat wie ich ihm es gesagt habe dafür eine Porcedure erstellt die zweimal aufgerufen wird.
Aber es wird nur ein Powerup gezeichnet. Dann habe ich es mit ihm debuggt und dann.... kommen wir zu dem komischen verhalten. Beim Debuggen mit(f7,f8 und f9) durch das Programm kommen am ende zwei gezeichnete Items aufs Spielfeld lässt mann ihn ohne Haltepunkte laufen dann wird nur eins erstellt. Ist euch solch ein Fehlverhalten bekannt. Woran könnte es liegen ?

Lazarus legt sowieso meiner Meinung oft ein komisches Verhalten an Tage.

MFG
ngott2

DeddyH 26. Feb 2014 10:50

AW: Lazarus merkwürdiges Verhalten
 
Ohne eine einzige Zeile Code zu kennen dürfte eine Fernanalyse beschwerlich werden. Vielleicht ein Refresh-Problem?

ngott2 26. Feb 2014 10:57

AW: Lazarus merkwürdiges Verhalten
 
Delphi-Quellcode:
 procedure TForm1.PowerupGenerator;
begin
  Randomize;
   n := Random(2);
  randomX := Random(Image1.Width - 20);
  randomY := Random(Image1.Height -20);
    case n of
    0:                                                 // gelbes powerup generiert
    begin
      Image1.Canvas.Pen.Color:=clYellow;
        Image1.Canvas.Brush.Color := clYellow;
      Image1.Canvas.Ellipse(randomX,randomY,randomX+10,randomY+10);
      Image1.Canvas.Pen.Color:=clBlue;
       Image1.Canvas.Brush.Color := clBlue;
      end;
      1:                                                    //lilanes powerup generiert
    begin
      Image1.Canvas.Pen.Color:=clPurple;
        Image1.Canvas.Brush.Color := clPurple;
      image1.Canvas.Ellipse(randomX,randomY,randomX+10,randomY+10);
      Image1.Canvas.Pen.Color:=clBlue;
       Image1.Canvas.Brush.Color := clBlue;
    end;
   end;
end;

und wird zwei mal aufgerufen

Klaus01 26. Feb 2014 11:00

AW: Lazarus merkwürdiges Verhalten
 
.. wie stellst Du sicher, dass n beim zweiten Aufruf einen anderen Wert hat?

Kannst Du der Prozedur nicht die Farbe des "PowerUpGenerators" mitgeben?


Edit: Randomize, nur einmal beim Programmstart aufrufen.
Grüße
Klaus

ngott2 26. Feb 2014 11:03

AW: Lazarus merkwürdiges Verhalten
 
Es dürfen ruhig die gleiche Farbe sein. Es müssen keine Unterschiedlichen sein.


edit < Sonst bräuchte ich ja kein Random > :)

DeddyH 26. Feb 2014 11:03

AW: Lazarus merkwürdiges Verhalten
 
Und ist zum benutzerdefinierten Zeichnen zur Laufzeit eine PaintBox nicht die bessere Wahl?

gammatester 26. Feb 2014 11:37

AW: Lazarus merkwürdiges Verhalten
 
Ich weiß zwar nicht ob das hilft, aber: Da ist auf jeden Fall der alte Anfängerfehler, jedesmal randomize aufzurufen. Randomize sollte nur einmal aufgerufen werden, zB beim Programmstart(es sein denn, man weiß genau, was man tut).

ub60 26. Feb 2014 12:23

AW: Lazarus merkwürdiges Verhalten
 
Der Fehler wurde schon mehrfach genannt. Es liegt eindeutig am Randomize. Bei den heutigen schnellen Rechnern erwischt man (zumindest in Lazarus) zwei mal den gleichen RamdomSeed-Wert. Damit werden immer zwei mal die gleichen Zufallswerte gezogen. Das erklärt Dein Ergebnis.

Beweis (so funktioniert es):
Delphi-Quellcode:
  PowerupGenerator;
  Sleep(10);
  PowerupGenerator;
ub60

ngott2 26. Feb 2014 12:27

AW: Lazarus merkwürdiges Verhalten
 
Danke euch. Es geht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz