Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Lageranimation mit einem Stapler als TBitmap (https://www.delphipraxis.net/134963-lageranimation-mit-einem-stapler-als-tbitmap.html)

DrDelphi 2. Jun 2009 11:41


Lageranimation mit einem Stapler als TBitmap
 
Servus und schöne Grüße an alle!
Mein Kollege und ich haben zurzeit folgendes Problem.
Wir lassen per rectangle ein Lagerzeichnen und ihn mit per Zufallsgenerator mit Werten füllen.
Anschließend wird per Buttonklick ein Timer aktiviert der immer wieder ein TBitmap zeichnen und wieder löscht.
Diese ist unser Stapler. Das bekommen wir so weit auch hin aber wir haben das Problem das er nur im Kreis fährt und nicht per
Zufallsgenerator die Gänge abfährt und per Zufall einlädt.

Kann uns jemand helfen?

Delphi-Quellcode:
    Procedure Gang1;
           begin
            if (xakt<=640) and (yakt=35) then
          xAkt:=xAkt+5;                          // 1 Gang

          if (xakt=645) and (yakt<=320) then
           YAkt:=Yakt+5 ;                          // 1 Gang abwärts
        end;


        Procedure Gang2;
           Begin
              if (xakt<=645)and (yakt=125) then
       xAkt:=xAkt-5;                       // 2Gang linksherum

     if (xakt=5)and (yakt<=125) then
       yAkt:=yAkt-5;                       //2Gang aufwärts


        end;

    Procedure Gang3;
   begin
    if (xakt<=645)and (yakt=220) then
       xAkt:=xAkt-5;                          // 3Gang linksherum

     if (xakt=5)and (yakt<=220) then
       yAkt:=yAkt-5;                          //3Gang aufwärts
end    ;

Procedure Gang4;
      Begin
      if (xakt<=645) and (yakt=320) then
                                                //4Gang linksherum
    xAkt:=xAkt-5;

    if (xakt=5) and (yakt<=320) then
  YAkt:=Yakt-5 ;                               //4Gang aufwärts


end;


Procedure zufaellig;
var
zufall:integer;

Begin
randomize;

zufall:=random(3) ;
zufall:=zufall+1;

if zufall=1 then
gang1;
if zufall=2 then
gang2;
if zufall=3 then
gang3;
if zufall=4 then
gang4;
End;

procedure TForm1.Timer1Timer(Sender: TObject);

begin
zufaellig;
if True then

Image1.Canvas.Draw(xAkt,yAkt,Stapler);
Timer2.Enabled:=True;

end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
  xAkt:=xAkt;
 Image1.Canvas.Draw(xAkt,yAkt,Staplerloeschen);

end;
[edit=mkinzler]Delphi-Tag gefixt Mfg, mkinzler[/edit]

mkinzler 2. Jun 2009 11:45

Re: Lageranimation mit einem Stapler als TBitmap
 
Randomize sollte nur einmal aufgerufen werden, da sonst immer der selbe "Zufall" auftritt.

BTW: Herzlich Willkommen in der Delphi-Praxis

DrDelphi 2. Jun 2009 11:51

Re: Lageranimation mit einem Stapler als TBitmap
 
Danke schön!!
Und super schnelle Antwort werde es gleich mal testen..

himitsu 2. Jun 2009 11:53

Re: Lageranimation mit einem Stapler als TBitmap
 
Zitat:

Zitat von mkinzler
Randomize sollte nur einmal aufgerufen werden, da sonst immer der selbe "Zufall" auftritt.

"selbe" nicht grad, aber der Zufallsgenerator würde dann jedesmal neu initialisiert (mit der grad aktuellen Systemzeit)

und würde dann keine gute/bessere Gleichverteilung der Zufallswerte mehr garantieren

mkinzler 2. Jun 2009 11:55

Re: Lageranimation mit einem Stapler als TBitmap
 
Zitat:

selber nicht grad, aber der Zufallsgenerator würde dann jedesmal neu Initialisiert (mit der aktuellen Systemzeit)
Bei solch kurzen Abständen schon. Deshalb fährt er auch im Kreis

DrDelphi 2. Jun 2009 12:09

Re: Lageranimation mit einem Stapler als TBitmap
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn ich die Gänge einzeln Aufrufe Fährt er logischerweise im Kreis, weil ich es ihm ja in der if Abfrage sage.
Also wenn ich in den Timer Gang1 und Gang 2 aufrufe.
Aber wenn ich es mit dem Random befehl mache ruckelt es bzw. fährt langsamer und fährt auch aus dem Bild raus.
Ein Bild ist angehängt.

himitsu 2. Jun 2009 12:20

Re: Lageranimation mit einem Stapler als TBitmap
 
Zitat:

Zitat von mkinzler
Bei solch kurzen Abständen schon.

ich seh keine "zu" kurzen Abstände

Randomize initialisiert mit GetTickCount und seit 'ner Weile auch mit QueryPerformanceCounter (falls verfügbar) und Beides sollte sich mindestens genauso schnell ändern, wie der Timer,
also immer wieder andere Initialwerte liefern :gruebel:

DrDelphi 2. Jun 2009 12:31

Re: Lageranimation mit einem Stapler als TBitmap
 
Wie können wir den Stapler denn die ganze zeit durch lager fahren lassen und durch zufall einlagern?

EWeiss 2. Jun 2009 14:15

Re: Lageranimation mit einem Stapler als TBitmap
 
Such mal nach dem Stichwort Pathfind
Das würde sich hierfür eher anbieten als mit zufall zu arbeiten.

Start und endpunkt angeben und mit dem Algo den stabler selbst den besten weg finden lassen.

Oder hier aus der Codelib
PathFind

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 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 by Thomas Breitkreuz