![]() |
AW: mehere Bilder mit einem Array ansprechen
Zitat:
es sei zu sagen: er arbeitet diese IF-Bedinungen in einem Timer ab. hier mein code: -in dem fall kommt mein ball von oben nach unten (die anderen IF-Bedingenen sehen genauso aus, nur dass sie eben die Bedinugnen für rechts, links oder oben sind -die erste If-Bedingung (jaja keine schleife^^) schaut, ob er sich am Rande des Bricks bzw IM Brick befindet, da mein Ball einen gewissen Speed hat und auch in den Brick eintauchen kann UND ob er überhaupt noch sichtbar ist (denn nach mehrmaligem hiten, soll er ja verschwinden) -die zweite Bedingung überprüft nun wo genau er sich dort befindet (oben, unten, rechts, links); zudem kann er durch meinen maximalen Speed von 8 nur 8 Pixel eintauchen -> diese Begrenzung ist nötig, da ja, wissen soll, ob er von oben oder unten kommt bzw rechts oder links; -die variable "lol" (keine fragen an der stelle^^) wird null gestetzt, damit er die anderen if bedingungen reingeht (von rechts,links,unten) -in der Bedingung lässt er den Ball in y-Richtung apprallen, setzt den Ball an den Rand des Briks(damit er sozusagen nicht mehr eintaucht) -broken ist eine spezifische Variable für jedes Brick die mittickt, je nachdem wie kaputt mein Brick ist (hier für das erste Bild) -dann läd er eines der 3 Bilder (kleines loch, mittleres loch, großes Loch) (der Zustand "Normal" ist bereits in der Formcreate dem Bild zugeordnet worden) -sollte Briks allerdings in letzten zustand sein (großes loch), soll er unsichtbar werden nun gehen wir wieder zur ersten bedinung, wo er schaut, ob er den Brick berührt; tut er das nicht so wird lol=0 gesetzt damit der ball sozusagen wieder hitten kann if (imageBALL.left+imageBALL.Width>=imageBRICK.left) and (ImageBALL.left<=imageBRICK.Left+ImageBRICK.width) and (imageBALL.top+imageBALL.Height>=imageBRICK.top) and (ImageBALL.top<=imageBRICK.top+imageBRICK.Height) and (imageBRICK.Visible=true) then begin if (imageBALL.top+imageBALL.height>=imageBRICK.Top) and (imageBALL.Top+imageBALL.Height<=imageBRICK.Top+8) and (lol=0) then begin //Von Oben y_bewegung:=y_bewegung*-1; imageBALL.Top:=imageBRICK.top-imageBALL.Height; broken-BRICK-NR-1:=broken-BRICK-NR-1+1; if broken-BRICK-NR-1<=4 then begin image2.Picture.LoadFromFile('briks' + inttostr(broken-BRICK-NR-1)+ '.bmp'); end else begin imageBRICK.Visible:=false; end; end; lol:=1; if (imageBALL.left+imageBALL.Width>=imageBRICK.left) //von rechts ... else lol:=0; end; Hoffentlich blickt man da druch^^. Ich muss nun für jeden Brick, dessen zustand und die Ortung des Balles in dem Brick überprüfen. Meine Frage war also: Kann ich dieses Ortung bzw auch den Zustand zu jedem an jedem Ball verallgemeinern, in dem ich eine "große" bedingung schreibe, in welchem er überprüft: Bild:array[1..6]; Bild1:=array[1], Bild2:=array[2], ... if (imageBALL.left+imageBALL.Width>=imageIRGEINDEIN BILD AUS ARRAY[1..6].left) and (ImageBALL.left<=imageIRGENDEIN BILD AUS ARRY [1..6].Left+ImageBRICK.width) and (imageBALL.top+imageBALL.Height>=imageIRGENDEIN BILD AUS ARRY [1..6].top) and (ImageBALL.top<=imageIRGENDEIN BILD AUS ARRY [1..6].top+imageIRGENDEIN BILD AUS ARRY [1..6].Height) and (image IRGENDEIN BILD AUS ARRY [1..6].Visible=true) Ich hoffe, dass ich mich hier grad net zum Deppen mache und bedanke mich schonmal für die zahlreichen Antworten. Ich werde versuchen ein paar von euren Tipps zu berücksichtigen. |
AW: mehere Bilder mit einem Array ansprechen
Bitte benutz den Delphi-Tag um deinen Code im Beitrag zu formatieren.
Sonst kann man das wirklich nicht lesen. Im Prinzip könnte das z.B. so funktionieren:
Delphi-Quellcode:
type
TForm1 = class(TForm) {...} private FBrickBilder: array[0..4] of TPicture; FBrick: array[1..6] of record Image: TImage; Broken: Integer; end; procedure Initialisieren; procedure DeInitialisieren; procedure SetBroken(AIndex, AValue: Integer); procedure CheckBallKollision(AIndex: Integer); end; procedure TForm1.Initialisieren; var i: Integer; begin // ein Bild für jeden Zustand erzeugen und laden for i := 0 to 4 do begin if FBrickBilder[i] = nil then FBrickBilder[i] := TPicture.Create; FBrickBilder[i].LoadFromFile('briks' + IntToStr(i) + '.bmp'); end; // die Images des Formulars für den indizierten Zugriff im array ablegen FBrick[1].Image := image2; FBrick[2].Image := image3; FBrick[3].Image := image4; FBrick[4].Image := image5; FBrick[5].Image := image6; FBrick[6].Image := image7; // Anfangszustand und Bild zuweisen for i := 1 to 6 do SetBroken(i, 0); end; procedure TForm1.DeInitialisieren; var i: Integer; begin // Aufräumen, Speicher der Bilder wieder freigeben for i := 0 to 4 do FreeAndNil(FBrickBilder[i]); end; procedure TForm1.SetBroken(AIndex, AValue: Integer); begin // Zustand und Bild zuweisen FBrick[AIndex].Broken := AValue; if AValue in (0..4) then begin FBrick[AIndex].Visible := True; FBrick[AIndex].Picure.Assign(FBrickBilder[AValue]) end else FBrick[AIndex].Visible := False; end; procedure TForm1.CheckBallKollision(AIndex: Integer); var r: TRect; x, y: Integer; begin // Brick sichtbar if FBrick[AIndex].Image.Visible then begin // Überschneidung mit Ball r := FBrick[AIndex].Image.BoundsRect; if IntersectRect(imageBALL.BoundsRect, r) then begin SetBroken(AIndex, FBrick[AIndex].Broken + 1); // von Oben y := imageBALL.BoundsRect.Bottom; if (y >= r.Top) and (y <= r.Top + 8) then begin y_bewegung := y_bewegung * -1; imageBALL.Top := r.Top - imageBALL.Height; Exit; //=> end; // von Rechts {...} end; end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin for i := 1 to 6 do CheckBallKollision(i); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 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