Einzelnen Beitrag anzeigen

Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Programm verbraucht zu viele System Resourcen unter Win

  Alt 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;
  ......
  Mit Zitat antworten Zitat