Registriert seit: 19. Apr 2003
407 Beiträge
Delphi 2006 Professional
|
Re: Programm verbraucht zu viele System Resourcen unter Win
16. Jan 2004, 21:10
Kuck dir folgendes an statt onidle solltest in deinem fall lieber Timer nehmen(mit onidle hat man 100% CPU Auslastung
Delphi-Quellcode:
type
TFeld = class
passierbar: boolean;
top : integer;
left : integer;
width : integer;
height : integer;
oberflaeche: integer;
end;
var
Spielfelder : array [0..100,0..100] of TFeld;
backpuffer: TBitmap;
Landschaften: Array[1..15] of TBitmap;
oncreate:
Delphi-Quellcode:
For i := 1 to 15 do
begin
Landschaften[i] := TBitmap.Create;
end;
Landschaften[1].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenunpassierbar\L1 beach.bmp');
Landschaften[2].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenunpassierbar\L2 beach.bmp');
Landschaften[3].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenunpassierbar\L3 beach.bmp');
Landschaften[4].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenunpassierbar\L4 beach.bmp');
Landschaften[5].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenunpassierbar\L5 beach.bmp');
Landschaften[6].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenunpassierbar\L6 beach.bmp');
Landschaften[7].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenunpassierbar\L7 beach.bmp');
Landschaften[8].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenunpassierbar\L8 beach.bmp');
Landschaften[9].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenunpassierbar\L9 beach.bmp');
Landschaften[10].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenunpassierbar\L10 beach.bmp');
Landschaften[11].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenunpassierbar\L11 beach.bmp');
Landschaften[12].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenunpassierbar\L12 beach.bmp');
Landschaften[13].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenunpassierbar\L13 Felsen.bmp');
Landschaften[14].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenpassierbar\L1 gras.bmp');
Landschaften[15].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bilder\Landschaftenpassierbar\L2 wasser.bmp');
Application.OnIdle := F_main.GameLoop;
for x := 0 to heigh() do
begin
for y := 0 to heigh() do
begin
Spielfelder[x,y] := TFeld.create;
Spielfelder[x,y].width := 25;
Spielfelder[x,y].height := 25;
Spielfelder[x,y].top := y;
Spielfelder[x,y].left := x;
Spielfelder[x,y].passierbar := true;
Spielfelder[x,y].oberflaeche := 15;
end;
end;
//onidel = Ereigniss das ausgelöst wird wenn das programm gerade nichts macht
//also ein guter zeitpunkt um zu zeichne
Procedure TF_main.GameLoop(Sender: TObject; var Done: Boolean);
Begin
Done := False;
for x := 0 to heigh(Spielfelder) do
begin
IF ((Spielfelder[x,1].left) >= 0) and (Spielfelder[x,1].left <= (backpuffer.Width div 25)) then {nur der sichtbare bereich wird getzeichnet}
begin
for y := 0 to heigh(Spielfelder) do
begin
IF (Spielfelder[x,y].top >= 0) and (Spielfelder[x,y].top <= (backpuffer.height div 25)-5) then {nur der sichtbare bereich wird getzeichnet}
begin //25 ist die breite der Felder
BitBlt(backpuffer.canvas.handle, karte.Spielfelder[x,y].left*25, Spielfelder[x,y].top*25, Spielfelder[x,y].width, Spielfelder[x,y].height, Landschaften[Spielfelder[x,y].oberflaeche].Canvas.Handle, 0, 0, srccopy);
end;
end;
end;
end;
BitBlt(F_main.canvas.handle, 0, 0, backpuffer.Width, backpuffer.Height, backpuffer.canvas.handle, 0, 0, srccopy);
End;
karte kannst du jetzt so erstellen:
Sourcecode:
Delphi-Quellcode:
karte.Spielfelder[10,10].passierbar := false;
karte.Spielfelder[10,10].oberflaeche := 1;
karte.Spielfelder[9,10].passierbar := false;
karte.Spielfelder[9,10].oberflaeche := 2;
karte.Spielfelder[9,9].passierbar := false;
karte.Spielfelder[9,9].oberflaeche := 3;
karte.Spielfelder[9,8].passierbar := false;
karte.Spielfelder[9,8].oberflaeche := 4;
karte.Spielfelder[10,8].passierbar := false;
karte.Spielfelder[10,8].oberflaeche := 5;
karte.Spielfelder[10,8].passierbar := false;
karte.Spielfelder[11,8].oberflaeche := 6;
karte.Spielfelder[11,8].passierbar := false;
karte.Spielfelder[11,9].oberflaeche := 7;
karte.Spielfelder[11,9].passierbar := false;
karte.Spielfelder[11,10].oberflaeche := 8;
......
|