![]() |
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 |
AW: Lazarus merkwürdiges Verhalten
Ohne eine einzige Zeile Code zu kennen dürfte eine Fernanalyse beschwerlich werden. Vielleicht ein Refresh-Problem?
|
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 |
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 |
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 > :) |
AW: Lazarus merkwürdiges Verhalten
Und ist zum benutzerdefinierten Zeichnen zur Laufzeit eine PaintBox nicht die bessere Wahl?
|
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).
|
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:
ub60
PowerupGenerator;
Sleep(10); PowerupGenerator; |
AW: Lazarus merkwürdiges Verhalten
Danke euch. Es geht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz