Einzelnen Beitrag anzeigen

Premaider

Registriert seit: 31. Mär 2012
160 Beiträge
 
#1

Zugriffsfverletzung - Aber warum

  Alt 18. Okt 2012, 23:48
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
l,k,m,n,o,AL1,AL2: Integer;
begin
//Kollision Spieler und Ziel
if IsCollision(Spieler.BoundsRect, Ziel.BoundsRect) then
  begin
  Punktzahl:=Punktzahl+1;
    If Sounds='EnabledThen
      begin
        SoundPlayer.FileName:=Pfad+'\Datein\Ziel.wav';
        SoundPlayer.Open;
        SoundPlayer.play;
      end;
    ItemCount:=ItemCount+1;
    Ziel.Top:=random(Spielflaeche.Height-Ziel.Height);
    Ziel.Left:=random(Spielflaeche.Width-Ziel.width);
    Memo2.lines.add(IntToStr(Ziel.Left)+';'+IntToStr(Ziel.top));
    // Gegner hinzufügen
      begin
       setLength(gegner,length(Gegner)+1);
       AL1 := length(Gegner)-1;
       Gegner[AL1]:= TGegner.Create(Self);
         With Gegner[AL1] do
          begin
            speed:=3;
            Parent := self;
            Cooldown := 1000;
            If RandomAusgabe(1)=1 Then
               begin
                  Width:=7;
                  Height:=40;
                  top:= 250;
                  Left := random( Spielflaeche.ClientWidth - Width );
                end;
            If RandomAusgabe(1)=0 Then
               begin
                  Width:=40;
                  Height:=7;
                  top:= random( Spielflaeche.clientheight - height );
                  Left := 450;
                end;
          end;
        end;
    //Item hinzufügen
      begin
        setLength(Item,length(Item)+1);
        AL2 := length(Item)-1;
        Item[AL2]:= TItem.Create(Self);
        With Item[AL2] do
          begin
            Parent:=Self;
            Height:=10;
            Width:=10;
            Top:=Random(Form1.ClientHeight-Height);
            Left:=Random(Form1.ClientWidth-Width);
            Brush.Color:=clblack;
            If RandomAusgabe(1)=1 then
              begin
                Pen.Color:=clgreen;
                Typ:=True;
              end;
            If RandomAusgabe(1)=0 then
              begin
                Pen.Color:=clred;
                Typ:=False;
              end;
          end;
  end;
...
//Kollision Spieler und Item
For n := low(item) to high(item) do
  begin
    If IsCollision(Spieler.BoundsRect,Item[n].BoundsRect) Then
      begin
        Spieler.Upgrade(n,Item[n].Typ);
      end;
  end;
end;
...
//Kollision Spieler und Gegner
For k:= low(gegner) to high(gegner) do
  begin
    if ((IsCollision(Gegner[k].BoundsRect, Spieler.BoundsRect))
    and (Gegner[k].Cooldown<=0)) then Verloren;
  end;
...
end;
Bei //Kollision Spieler und Item bekomme ich eine Zugriffsverletzung. Ich verstehe allerdings nicht warum. Genauso werden bei mir die Gegner behandelt und bei denen funktioniert es. Zudem die Gegner ja genauso erstellt werden.
Weiß jemand warum ?
  Mit Zitat antworten Zitat