AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Mehrere Bilder gleichzeitig bewegen
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Bilder gleichzeitig bewegen

Ein Thema von hannibal007 · begonnen am 22. Mär 2005 · letzter Beitrag vom 23. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
hannibal007

Registriert seit: 22. Mär 2005
6 Beiträge
 
#1

Mehrere Bilder gleichzeitig bewegen

  Alt 22. Mär 2005, 17:03
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.
  Mit Zitat antworten Zitat
Jarmen_Kell

Registriert seit: 17. Mär 2005
188 Beiträge
 
#2

Re: Mehrere Bilder gleichzeitig bewegen

  Alt 22. Mär 2005, 18:19
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;
  Mit Zitat antworten Zitat
hannibal007

Registriert seit: 22. Mär 2005
6 Beiträge
 
#3

Re: Mehrere Bilder gleichzeitig bewegen

  Alt 22. Mär 2005, 20:41
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;
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Mehrere Bilder gleichzeitig bewegen

  Alt 23. Mär 2005, 07:39
Zitat von hannibal007:
Delphi-Quellcode:
    for I := 1 to strtoint(lbl1.Caption) do
  biertest[I].top := biertest[I].Top + 20;
  begin
Hast du das so in deinem Code stehen?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
hannibal007

Registriert seit: 22. Mär 2005
6 Beiträge
 
#5

Re: Mehrere Bilder gleichzeitig bewegen

  Alt 23. Mär 2005, 10:26
Zitat von Khabarakh:
Zitat von hannibal007:
Delphi-Quellcode:
    for I := 1 to strtoint(lbl1.Caption) do
  biertest[I].top := biertest[I].Top + 20;
  begin
Hast du das so in deinem Code stehen?
Ja.
Soll ich das Spiel auf meinen Webspace uploaden?
  Mit Zitat antworten Zitat
Jarmen_Kell

Registriert seit: 17. Mär 2005
188 Beiträge
 
#6

Re: Mehrere Bilder gleichzeitig bewegen

  Alt 23. Mär 2005, 11:01
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:
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;
die Targets und Richtungen etc. müsstest du natürlich ersetzen.

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
  Mit Zitat antworten Zitat
hannibal007

Registriert seit: 22. Mär 2005
6 Beiträge
 
#7

Re: Mehrere Bilder gleichzeitig bewegen

  Alt 23. Mär 2005, 12:22
Zitat von Jarmen_Kell:
Hmm gut, ich weiß jetzt nicht, was lbll.Caption ist
Bei tm2 wird die Anzahl der Bilder die gleichzeitig nach unten laufen sollen in einem Label(lbl1) angegeben. Bei tm1 wird der Wert aus lbl1 wieder in integer umgewandelt damit mein timer(tm2) weiss wieviele Bilder er gleichzeitig bewegen soll.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: Mehrere Bilder gleichzeitig bewegen

  Alt 23. Mär 2005, 12:26
Zitat von hannibal007:
Zitat von Khabarakh:
Zitat von hannibal007:
Delphi-Quellcode:
    for I := 1 to strtoint(lbl1.Caption) do
  biertest[I].top := biertest[I].Top + 20;
  begin
Hast du das so in deinem Code stehen?
Ja.
Soll ich das Spiel auf meinen Webspace uploaden?
Sollte es nicht so heißen:
Delphi-Quellcode:
    for I := 1 to strtoint(lbl1.Caption) do
begin
  biertest[I].top := biertest[I].Top + 20;
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
hannibal007

Registriert seit: 22. Mär 2005
6 Beiträge
 
#9

Re: Mehrere Bilder gleichzeitig bewegen

  Alt 23. Mär 2005, 12:40
@Khabarakh
Du hast recht jedoch funzt es auch so nicht.
Die Bilder werden angezeigt jedoch bewegen sich nicht nach unten.
  Mit Zitat antworten Zitat
Jarmen_Kell

Registriert seit: 17. Mär 2005
188 Beiträge
 
#10

Re: Mehrere Bilder gleichzeitig bewegen

  Alt 23. Mär 2005, 13:58
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:25 Uhr.
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