Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bildschirmschoner (https://www.delphipraxis.net/1155-bildschirmschoner.html)

City Light 25. Okt 2002 21:24


Bildschirmschoner
 
Ich bin gerade dabei mir mein eignenden Schoner zu programmieren.
Nun komme ich aber nicht mehr weiter, folgendes..jeder kennt doch den Schoner von Windows.Ich glaub der heißt 3D-Objekt oder so na ja der, der sich von einer Seite zur anderen Seite des Bildschirmes bewegt.Also in allen Richtungen prallt.


Hier was ich zur Zeit Habe
Code:
var
  Form1: TForm1;
  vx: Integer = 1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.DoubleBuffered:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Image1.Left:=Image1.Left +vx;
  if Image1.Left>ClientWidth - Image1.Width-1 then
    vx:=vx*-1;
  if Image1.Left<1 then
    vx:=vx*-1;
end;
kann mir da jemand helfen?
Danke im vorraus

Daniel B 25. Okt 2002 21:30

Hallo City Light,

vielleicht solltest Du uns verraten was denn genau nciht geht.
Welche Zeit hast Du im Timer eingestellt?

Grüsse, Daniel :hi:

City Light 25. Okt 2002 21:34

Hi Daniel

Nun Ich wollte ein Bild im meinen Schoner einbauen, und der sollte kreuz und quer auf dem Monitor umherwandern

Den Timer habe ich auf 10 gestellt

Daniel B 25. Okt 2002 21:42

Hi,

was es machen soll hab ich kapiert, aber nciht was das Problem ist. Was passiert oder was passiert nicht?
Stellt den Timer mal auf 100 oder 200ms. Probiere es aus.
Alles was unter 50ms ist, ist für Windows eine reinen Tortur und Du kannst froh sein, wenn da überhaupt sich was bewegt. Versuch doch mal mit 5 oder 10ms eine Message anzuzeigen. Bei mir ist Windows mit solchen Zeiten schonmal abgestürtzt. Windows ist nunmal KEIN Echtzeitbestriebssystem. Das darfst Du nciht vergessen.

Grüsse, Daniel :hi:

City Light 25. Okt 2002 21:48

Ich habs jetzt auf 100ms gestellt und siehe da es bewegt sich von link nach rechts :bounce2:

Nun wie bekomme ich aber das es sich in allen Richtungen bewegen kann :?:

Daniel B 25. Okt 2002 21:54

Hi,

ich habe es soeben ausprobiert. Es bewegt sich von links nach rechts. Na Toll. :roll: :wink:
Das wollte ich wissen, man muss ja nciht immer alles selber ausprobieren. Übrigens, bei mir läuft es im prinzip auch mit 10ms. Jedoch ruckelt es arg stark. Nciht unter 50ms, dann sieht es gut aus.
Ich werkel mal ein bisschen dran. Wenn Du möchtest das es sich in allen Richtungen bewegt, dann muss man da mit Randomize arbeiten und nciht mit festen links, rechts angaben, bringt ja nichts.

Grüsse, Daniel :hi:

City Light 25. Okt 2002 22:01

Danke für deine Hilfe :D

ein Code schnipzel wäre echt prima da ich noch nicht so den Umgang mit Delphi habe

Ich kann warten :hello: :spin:

d3g 26. Okt 2002 11:41

Hi City Light,

wen du willst, dass das Bild "kreuz und quer" herumfliegt, dann musst du auch eine Bewegung für die y-Richtung einbauen.

Code:
var
  Form1: TForm1;
  vx: Integer = 1;
  vy: Integer = 1;

implementation

{$R *.DFM} 

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.DoubleBuffered:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Image1.Left := Image1.Left + vx;
  Image1.Top := Image1.Top + vy;

  if ((Image1.Left > (ClientWidth - Image1.Width - 1)) or
      (Image1.Left < 1)
  then
    vx := vx * -1;
 
  if ((Image1.Top > (ClientHeight - Image1.Height - 1)) or
      (Image1.Top < 1)
  then
    vy := vy * -1;
end;
Wenn das Image in einem anderen Winkel fliegen soll, dann musst du nur den Startwert von vx bzw. vy ändern.

MfG,
d3g

Daniel B 26. Okt 2002 12:07

Hi,

bei dem Source von d3g:
vor den then fehlt noch eine )
Die Variablen vx un vy dürfen nie den gleichen Wert haben, sonst bewegt sich das Bild nur in der Diagonalen.

Grüsse, Daniel :hi:

Nachtrag: ausserdem musst DU die Scrollbars von Form1 ausschalten, sonst Blitzen die manchmal auf.

Daniel B 26. Okt 2002 12:35

Hi,

so nun auch mein Beispiel:

Code:
var
  Form1: TForm1;
  vx, vy: integer;

implementation
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
  vx := -10 + Random(20);
  vy := -10 + Random(20);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Image1.Left := Image1.Left + vx;
  Image1.Top := Image1.Top + vy;
  if (Image1.Left > ClientWidth - Image1.Width - 1) or (Image1.Left < 1) then
    vx := vx * -1;
  if (Image1.Top > ClientHeight - Image1.Height - 1) or (Image1.Top < 1) then
    vy := vy * -1;
end;
Auch hier muss man leider die Scrollbars ausschalten, Vielleicht schaffst Du es selbst dies zu verhindern.
Die Startrichtung ist immer unterschiedlich.

Grüsse, Daniel :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 Uhr.
Seite 1 von 2  1 2      

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