Registriert seit: 5. Mai 2007
56 Beiträge
|
[Andorra2D]Speicherausnutzung steigt bei AdDraw
11. Okt 2008, 19: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;
|
|
Zitat
|