AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Image bewegen, sleep funktion, wettrennen
Thema durchsuchen
Ansicht
Themen-Optionen

Image bewegen, sleep funktion, wettrennen

Offene Frage von "hoika"
Ein Thema von Baerchenv · begonnen am 13. Mai 2019 · letzter Beitrag vom 14. Mai 2019
 
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Image bewegen, sleep funktion, wettrennen

  Alt 14. Mai 2019, 11:05
hmm ok, zu lange her das ichs genutzt habe war ja auch nur ein Beispiel.

@Delph.Narium: Du hast einen kleinen Fehler in deinem Beispiel:

Image1.Left := Image1.Left + Random(iRandom);
Image2.Left := Image2.Left + Random(iRandom);
Image3.Left := Image2.Left + Random(iRandom);

Das mit der Bedingung der Schleifen Nutzung hatte ich garnicht gesehen. Die Schleifen hatte halt den Nachteil das immer Bild 1 als Erstes bewegt wird (evtl. daher im Vorteil bzw. es könnten mehrere gleichzeitig das Ziel erreichen).

Hier mal dasBeispiel von Delphi.Narium etwas erweitert.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Imaging.pngimage,
  Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Image2: TImage;
    Image3: TImage;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  iSleep : Integer;
  iRandom : Integer;
  sMoveImage : String;
begin
  Image1.Left := 0; //
  Image2.Left := Image1.Left; //setz die Position der Images zurück um einen neuen Durchlauf starten zu können
  Image3.Left := Image1.Left; //

  iSleep := 10; // Wertebereich für die Pausen per Sleep, eventuell anpassen.
                 // Die Pausen werden dadurch unterschiedlich lang.
  iRandom := 5; // Wertebereich für die zufällige Verschiebung der Bilder, eventuell anpassen.
                 // Die Anzahl der Pixel, um die verschoben wird, ändert sich je Schleifendurchlauf und je Bild.

  if (Image1.Left < 400) and (Image2.left < 400) and (Image3.left < 400) then begin
  begin
    repeat
      sMoveImage := 'Image' + inttostr(random(3) + 1); //Zufällige Auswahl welches Bild bewegt werden soll.
      TImage(Form1.FindComponent(sMoveImage)).Left := TImage(Form1.FindComponent(sMoveImage)).Left + Random(iRandom);
      Application.ProcessMessages;
      Sleep(Random(iSleep));
    until (image1.left>399) or (Image2.Left>=399) or (Image3.Left>=399);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize; // Je nach Delphiversion (insbesondere bei älteren) erforderlich.
             // Sollte aber nur einmal aufgerufen werden, daher ins FormCreate verschieben.
end;

end.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (14. Mai 2019 um 12:20 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:17 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