Moin Community,
Also, ich arbeite derzeit an einer "Art" Pacman.
Das ganze sieht so aus: Man steuert ein Pacman durch die typische "Pacman" Karte und frisst Geister auf die dort zufällig herumlaufen.
Klappt eigentlich soweit auch alles.
Nun zu meinem Problem: bei etwas erhöhter Zahl von Geister, insbesondere bei Leistungsschwächeren Rechner fängt das Spiel schnell an zu ruckeln.
Dazu muss man sagen: ich war bislang beim programmieren froh WENN es geklappt hat, egal wie schön(ressourcen sparsam) es programmiert war. Meint also: mir ist bewusst dass das ganze ziemlich "hässlich" programmiert ist.
Also es funktioniert so, das die Geister auf einen Timer immer 1 pixel in eine richtung gehen, vor jeder Bewegung wird die procedure "Kollisionsabfrageg" gestartet.
Delphi-Quellcode:
procedure TForm1.KollisionsabfrageG;
var
l,r,i,v:integer;
begin
if anzahl>0 then //Anzahl=Anzahl der Geister
for i:=1 to anzahl do begin
if existiert[i]=true then begin
if geister[i].left<1 then
geister[i].left:=750;
if geister[i].left>750 then
geister[i].left:=-0;
if ((image1.canvas.pixels[Geister[i].left-1,geister[i].top] = RGBtocolor (0,0,255)))or //Image1 ist das "hintergrundbild, also die Karte, die "Wände" sind blau
((image1.canvas.pixels[Geister[i].left-1,geister[i].top+29] = RGBtocolor (0,0,255))) // 0,0,255
then
l:=1
else
l:=0;
if ((image1.canvas.pixels[geister[i].left+29,geister[i].top] = RGBtocolor (0,0,255)))or
((image1.canvas.pixels[geister[i].left+29,geister[i].top+29] = RGBtocolor (0,0,255)))
then
r:=1
else
r:=0;
if (l=0) and (r=0) then
kollisiong[i]:=false
else begin
kollisiong[i]:=true;
end;
if kollisiong[i]=true then begin
if richtungg[i]=1 then geister[i].left:=geister[i].left-2;
if richtungg[i]=2 then geister[i].top:=geister[i].top+2;
if richtungg[i]=3 then geister[i].left:=geister[i].left+2;
if richtungg[i]=4 then geister[i].top:=geister[i].top-2;
case richtungg[i] of
1: case v of 0:richtungg[i]:=1; 1:richtungg[i]:=2; 2:richtungg[i]:=4;end;
2: richtungg[i]:=random(3)+1;
3: richtungg[i]:=random(3)+2;
4: case v of 0:richtungg[i]:=1; 1:richtungg[i]:=3; 2:richtungg[i]:=4;end;
end;
end;
end;
end;
Gut also was ich gerne wissen möchte:
Habt ein paar tipps um ressourcen schonender zu programmieren ? Was sind wahre CPU Fresser ? Zufallszahlen ? Bilder laden etc ?
Habt ihr vielleicht sogar eine bessere Idee zur Realisierung ?
Wenn ihr noch Fragen habt, oder andere Programmteile sehen wollt, oder ich mich unverständlich ausgedrückt habe, sagt es mir bitte =)
Vielleicht kann ja jemand helfen
DAnke schonmal im vorraus =)
PS: Achja ich arbeite mit Lazarus