![]() |
Mehrere Bilder gleichzeitig bewegen
Mein Code funzt leider nur für ein Bild, ich will aber dass mehrere Bilder gleichzeitig nach unten laufen. Das zweite Bild soll ca.1 sekunde nach dem ersten starten. Ich habs schon mit arrays und for Scheifen versucht, jedoch vergeblich. Was muss ich ändern damit auch mehrere Bilder gleichzeitig nach unten laufen können?
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if key = vk_left then begin img1.Left:= img1.left -50; //Korb(img1) wird nach links verschoben. if img1.left < 0 then form1.img1.Left := 0; end; if key = vk_right then begin img1.Left:= img1.left +50; //Korb(img1) wird nach rechts verschoben. if img1.Left + img1.Width > form1.Width then img1.Left:= form1.Width - img1.Width; end; end; procedure TForm1.btn1Click(Sender: TObject); begin btn1.Visible := false; tm2.Enabled := true; end; procedure TForm1.tm1Timer(Sender: TObject); begin bier1.top := bier1.Top + 20; //Geschwindigkeit des Bildes das nach unten läuft. if (bier1.Top + bier1.Height >= img1.Top) AND (bier1.Left <= img1.Left + img1.Width) AND (bier1.Left + bier1.Width >= img1.Left) then begin bier1.Visible := false; lblres.Caption := inttostr(strtoint(lblres.Caption)+50); //Wenn mein Korb(img1) eine herunterfallende Bierflasche(bier1) auffängt bekommt man 50 Punkte. tm2.Enabled := true; tm1.Enabled := false; end; if bier1.Top > form1.ClientHeight then begin bier1.Visible := false; tm2.Enabled := true; tm1.Enabled := false; end; end; procedure TForm1.tm2Timer(Sender: TObject); begin bier1 := TImage.Create(Self); bier1.Parent:= Self; bier1.Picture.LoadFromFile('flasche'+inttostr(random(3)+1)+'.bmp'); //Ich habe 3 verschiedene Bilder(flasche1, flasche2, flasche3) Jedesmal wird durch random entschieden welches Bild genommen wird. bier1.AutoSize:=True; bier1.Left:= random(form1.ClientWidth-bier1.Width); bier1.Top:= -(bier1.Height); tm1.Enabled := true; tm2.Enabled := false; end; end. |
Re: Mehrere Bilder gleichzeitig bewegen
Bei dir kann immer erst ein neues "Bier" fallen, wenn das alte unten ist, und damit den "Neues-Bier-Timer" aktiviert. ( t2 )
Dieser wird schließlich erst durch
Delphi-Quellcode:
begin
bier1.Visible := false; lblres.Caption := inttostr(strtoint(lblres.Caption)+50); //Wenn mein Korb(img1) eine herunterfallende Bierflasche(bier1) auffängt bekommt man 50 Punkte. tm2.Enabled := true; // < ----- Das tm1.Enabled := false; end; if bier1.Top > form1.ClientHeight then begin bier1.Visible := false; tm2.Enabled := true; // <----- oder das aktiviert tm1.Enabled := false; end; |
Re: Mehrere Bilder gleichzeitig bewegen
Um die Anzahl der Bilder zu erhöhen habe ich eine for Schleife eingebaut, leider funzt es aber nicht richtig. Die Bilder werden zwar angezeigt, jedoch bewegen sie sich nicht nach unten. Es bewegt sich nur ein unsichtbares Bild unendlich weit nach unten.
Delphi-Quellcode:
procedure TForm1.tm1Timer(Sender: TObject);
type imgsammlung = Array[1 .. 3] of timage; var biertest : imgsammlung; I : integer; begin biertest[1] := bier1; biertest[2] := bier2; biertest[3] := bier3; for I := 1 to strtoint(lbl1.Caption) do biertest[I].top := biertest[I].Top + 20; begin if (biertest[I].Top + biertest[I].Height >= img1.Top) AND (biertest[I].Left <= img1.Left + img1.Width) AND (biertest[I].Left + biertest[I].Width >= img1.Left) then begin biertest[I].Visible := false; lblres.Caption := inttostr(strtoint(lblres.Caption)+50); end; if biertest[I].Top > form1.ClientHeight then biertest[I].Visible := false; end; end; procedure TForm1.tm2Timer(Sender: TObject); type imgsammlung = Array[1 .. 3] of timage; var biertest : imgsammlung; I, A : integer; begin biertest[1] := bier1; biertest[2] := bier2; biertest[3] := bier3; A := random(3)+1; lbl1.Caption := inttostr(A); for I:= 1 to A do begin biertest[I] := TImage.Create(Self); biertest[I].Parent:= Self; biertest[I].Picture.LoadFromFile('flasche'+inttostr(random(3)+1)+'.bmp'); biertest[I].AutoSize:=True; biertest[I].Left:= random(form1.ClientWidth-biertest[I].Width); biertest[I].Top:= (biertest[I].Height); end; tm1.Enabled := true; end; |
Re: Mehrere Bilder gleichzeitig bewegen
Zitat:
|
Re: Mehrere Bilder gleichzeitig bewegen
Zitat:
Soll ich das Spiel auf meinen Webspace uploaden? |
Re: Mehrere Bilder gleichzeitig bewegen
Hmm gut, ich weiß jetzt nicht, was lbll.Caption ist,
aber zumindest bewegt sich das Ding jetzt nicht immer in gewissen Abständen nach unten, sondern auf Grund der Schleife im Prinzip sofort. Das ganze muss schon über nen Timer laufen. Ich hatte mal eine Art Moorhuhnjagd gebaut und das ist ja das selbe wie bei dir, nur in ner anderen Richtung etc. Auszug:
Delphi-Quellcode:
die Targets und Richtungen etc. müsstest du natürlich ersetzen.
procedure Tformmain.timertargetTimer(Sender: TObject);
begin if timeleft<=0 then begin timertarget.Enabled:=False; timertimeleft.Enabled:=False; labeltimeleftamount.Caption:=inttostr(timeleft); end; if target1.left<=-30 then begin target1.left:=850; target1.top:=random(470)+5; end else target1.left:=target1.left-2; if target2.left<=-30 then begin target2.left:=850; target2.top:=random(470)+5; end else target2.left:=target2.left-2; if target3.left<=-30 then begin target3.left:=850; target3.top:=random(470)+5; end else target3.left:=target3.left-2; end; Und dann musste noch etwas einbauen, dass neue Objekte oben erstellt und die alten unten löscht. Alternativ kannste auch die, die unten angekommen sind, nach oben bewegen und neu fallen lassen. Edit: 'n Paar Rechtschreib- und Grammatikfehler behoben |
Re: Mehrere Bilder gleichzeitig bewegen
Zitat:
|
Re: Mehrere Bilder gleichzeitig bewegen
Zitat:
Delphi-Quellcode:
for I := 1 to strtoint(lbl1.Caption) do
begin biertest[I].top := biertest[I].Top + 20; |
Re: Mehrere Bilder gleichzeitig bewegen
@Khabarakh
Du hast recht jedoch funzt es auch so nicht. Die Bilder werden angezeigt jedoch bewegen sich nicht nach unten. |
Re: Mehrere Bilder gleichzeitig bewegen
Also ich würde dir raten, einfach eine Fixe Bilder-Anzahl zu nehmen mußt dann eben gucken, wie viele du maximal brauchst. Wenn die Zahl im Spiel Variabel sein soll, kannste das dann ja immernoch machen, dass z.B nur img1,img2,...,img5 fallen
Das ist mit if then else schnell gemacht Und dann kannst du vom Prinzip meinen Ooben geposteten Source nehmen, nur eben die Richtungen etc ändern. @Khabarakh: Naja das mit dem "begin" geht schon, er schließsts ja auch später wieder. Das ganze macht er danach noch einmal, allerdings frage ich mich auch sehr nach dem Sinngehalt ;) Gut, Optische Gliederung vllt. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 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