Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: mehere Bilder mit einem Array ansprechen

  Alt 6. Mär 2012, 15:56
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;
  Mit Zitat antworten Zitat