Einzelnen Beitrag anzeigen

Benutzerbild von Eljey
Eljey

Registriert seit: 5. Mai 2007
56 Beiträge
 
#1

[Andorra2D]Speicherausnutzung steigt bei AdDraw

  Alt 11. Okt 2008, 18:21
Bei meiner Anwendung steigt die Speicheraunutzung bis ins unendliche. Es gibt ein ähnliches Thema zum PArtikelsystem, aber das hiolft mir nicht hier der code:

Delphi-Quellcode:
procedure Tf_menu.Idle(Sender: TObject; var Done: boolean);
begin
  if AdDraw.CanDraw then //Wenn überhaupt auf das AdDraw gezeichnet werden kann dann...
  begin
     IF klick THEN
     begin
      AdPerCounter.Calculate;
      alpha := Round(alpha + 300 * (AdPerCounter.TimeGap / 1000));
      IF alpha<=255 then
      begin
        mZeichnen(alpha);
      end
      ELSE
      begin
       alpha:=0;
       mClick;
       klick:=false;
      end;
     end
     Else
      mZeichnen(alpha);
      
    AdDraw.EndScene;

    AdDraw.Flip; //Präsentiert die gezeichneten Dinge auf dem Bildschirm.
  end;

  Done := false; // Diese Zeile nicht vergessen, sonst wird der Code nur sporadisch ausgeführt.
end;
Delphi-Quellcode:
procedure Tf_menu.mZeichnen(alpha:integer);
var i,a,h,w:integer;
    v:tvektor;
begin
AdDraw.ClearSurface(clblack);//fuellt den Bildschirm mit Farbe
h:=AdImageList.Find(mMenu[mCurrentMain].name).Height;
w:=AdImageList.Find(mMenu[mCurrentMain].name).width;
a:=300;
v.x:=mitte_dis_x;
v.y:=mitte_dis_y+a;
i:=0;
//bis zur stelle gehen an den die child elemente anfangen
Repeat
 i:=i+1;
until mMenu[i].parent=mMenu[mCurrentMain].id;
//jedes child element zeichnen
Repeat
 with AdDraw.Canvas do
 begin
 Pen.Width:=1; //linien dicke
 Pen.Color := Ad_ARGB(255,255,255,255); //Farbverlauf von...
 MoveTo(mitte_dis_x,mitte_dis_y);//setzte anfang der linie auf mitte
 Pen.Color := Ad_ARGB(0,255,255,255);//...zu
 LineTo(v.x,v.y); //ziehe die linie bis zu den koordinaten v.x v.y
 Release; //zeichnen

 AdImageList.Find(mMenu[mCurrentMain].name).Draw(AdDraw,mitte_dis_x-(w div 2),mitte_dis_y-(h div 2),0); //parent bild
 AdImageList.Find(mMenu[i].name).Draw(AdDraw,v.x-(w div 2),v.y-(h div 2),0); // child bild
 //ort zuweisen
 mMenu[i].x:=v.x;
 mMenu[i].y:=v.y;
 
 i:=i+1;
 v:=mDrehen(v.x,v.y,360 DIV mAnzahl); //Punkt drehen
 end;

//überblendung, wenn geklickt wurde
until (mMenu[i].parent<>mMenu[mCurrentMain].id) OR (i>length(mMenu));
 with AdDraw.Canvas do
 begin
 Pen.Color := Ad_ARGB(alpha,0,0,0);
 Brush.Color:=Ad_ARGB(alpha,0,0,0);
 Rectangle(0,0,mitte_dis_x*2,mitte_dis_y*2);
 Release;
 end;
 
end;
  Mit Zitat antworten Zitat