Hallo,
ich hab irgendwie ein sehr seltsames Problem (Für mich zumindest^^)
Ich bin dabei ein Spiel zu programmieren, das so eine Mischung aus "Worms" und den normalen "Cannon"-Spielen ist. Es stehen also zwei Spieler in einer 2D Landschaft und können sich ein bisschen bewegen und sich gegenseitig beschießen. Zunächst wurde die Landschaft entweder aus einer externen Bitmap-Datei in das Spielfeld geladen oder selbst "gemalt". Jetzt hab ich jedoch zusätzlich die Möglichkeit eingebaut eine zufallsgenerierte Landschaft einzubauen. Hierfür werden zufällige Punkte erzeugt und miteinander verbunden, es entsteht also eine zackige Kurve - soweit sogut. Später hab ich aber den Bereich unter der Kurve mit FloodFill auch noch gefärbt wie es sich eben gehört
. Als ich das Spiel dann ausprobiert hab, hat das Spiel plötzlich extrem gelaggt. Die Spieler und Geschosse bewegen sich durch ganz normale Timer und haben sich immer flüssig bewegt, seit dem FloodFill Befehl nicht mehr. Es liegt definitiv an diesem Befehl - wenn ich den rausnehme und nur die Kurve zeichne läuft es wunderbar. Dabei wird die Prozedur mit dem Floodfill während der Spieler/Geschossbewegung gar nicht mehr aufgerufen? Ist mit völlig unverständlich, aber vielleicht kann mir ja hier wer helfen^^.
Hier noch der Code:
Delphi-Quellcode:
paintbox1.canvas.brush.color:=farbe;
paintbox1.Canvas.pen.style:=psclear;
paintbox1.Canvas.Rectangle(0,0,paintbox1.width+1,paintbox1.height+1);
//Hier wird das Spielfeld (Paintbox1) erstmal komplett mit "farbe" übermalt (farbe ist die defininierte Hintergrundfarbe,
//auf die die Geschosse nicht reagieren, bei allen anderen Farben explodieren sie)
paintbox1.canvas.Pen.style:=pssolid;
paintbox1.canvas.Pen.color:=clblack;
paintbox1.canvas.moveto(0,paintbox1.height-350+random(310));
//Anfangspunkt wird gesetzt
for j:=1 to trunc(paintbox1.width/80) do paintbox1.canvas.lineto(j*80,paintbox1.height-350+random(310));
//Die Linie wird gezeichnet
paintbox1.canvas.lineto(paintbox1.width+1,paintbox1.height-350+random(310));
//Die linie wird bis zum Endpunkt gezeichnet
paintbox1.canvas.brush.color:=clblack;
paintbox1.Canvas.FloodFill(3,paintbox1.height-3,clblack,fsborder); // <-- Dieser Befehl macht alles langsam :(
timers.enabled:=true;
timersr.enabled:=true;
// Timer, die die Spieler von oben fallen lassen, bis sie auf Landschaft "treffen" werden gestartet, laufen aber nicht flüssig
Ich weiß, dass das alles nicht so sauber programmiert ist, aber das ist mein erstes größeres Projekt und ich bin völlig ohne Logik rangegangen... Trotzdem kann ich mir nicht erklären, warum es auf einer Landschaft die so generiert ist, nicht genauso läuft wie auf jeder x-beliebigen Landschaft, da diese Prozedur die Landschaft ja nur einmal erstellt - und zwar schnell! und dann nie wieder aufgerufen wird...