webForumDet fria alternativet

acces violation

2 svar · 185 visningar · startad av Alpha II

Alpha IIMedlem sedan maj 20002 993 inlägg
#1
  TSpriteClass = class of TSprite;

  TEnemyPos = record
    c: TSpriteClass;
    x: Double;
    y: Double;
  end;

  TEnemyFormation = record
    num: Integer;
    enemy: array[0..9] of TEnemyPos;
  end;

****

    EF: array[0..MAXFORMATIONS] of TEnemyFormation;

****

procedure TMainForm.MakeEnemy();
var
  i: integer;
  j: integer;
  Enemy: TSprite;
begin
  Randomize();
  if Random(100) = 0 then begin
    j := Random(High(EF));
    for i := 0 to EF[j].num do begin
      with EF[j].enemy[i] do begin
        Enemy := c.Create(DXSpriteEngine.Engine);
        Enemy.X := x;
        Enemy.Y := y;
      end;
    end;
  end;
end;

Får acces violation här:
Enemy := c.Create(DXSpriteEngine.Engine);

agneta_rungMedlem sedan juli 2002145 inlägg
#2

Vad är DXSpriteEngine.Engine? Är den initierad? Är arrayen enemy initierad med instanser av TEnemyPos?

Symtomen tyder på att antingen DXSpriteEngine eller DXSpriteEngine.Engine eller EF[j].enemy är nil... Sätt en brytpunkt i koden och kolla värdena.

Alpha IIMedlem sedan maj 20002 993 inlägg
#3

haha! vilket simpelt fel
tack för hjälpen. jag hade skapat en funktion som hette init() där jag initierade värderna i arrayen, men jag hade aldrig anropat funktionen :OO

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)