Ich bastle gerade mit der SDL herum, und soweit funktioniert es ganz gut.
Mein Problem ist derzeit, das die SDL in der Version 1.2 scheinbar keine Funktion zum zeichnen einer Linie bereitstellt. SDL_gfx und SDL_draw (zwei weitere DLLs, die die Funktion scheinbar bereitstellen) würde ich gerne umgehen, da ich befürchte das sie zu Kompabilitätsproblemen führen könnten (will nach möglichkeit Crossplattformfähig für Windows und Linux schreiben), und ich derzeit Probleme habe SDL_gfx unter Win7 64 bit zu kompilieren ;/.
Daher steht nun die Idee im Raum einfach selbst eine Funktion zum Zeichnen einer Linie zu basteln. Nur hätte ich dazu wohl in der Analysis wohl besser aufpassen müssen:
Wenn ich das ganze in eine Schleife packe, die von x1 bzw. y1 zu x2 oder y2 durchläuft, gibt es Probleme mit der Länge der Darstellung wenn die Linie hier unpassende Werte hat (z.B. x1=0 y1= 5, x2= 0, y1 = 8 => eine Schleife die von x1 zu x2 durchläuft würde keine Linie darstellen). Mein Lösungsversuch beinhaltet daher zwei Schleifen: Einmal eine Schleife von x1-1 zu x2, und darin dann eine y1-1 zu y2 Schleife. In der X-Schleife wird.
Die X-Schleife dient eigt. nur dazu den Wert nach oben zu Setzen, die y-Schleife erhöht mit jedem durchlauf den Pointer um die Breite des Screens.
Die Funktion sieht nun so aus:
Code: Alles auswählen
procedure DrawLine(x1,x2,y1,y2: integer; handle: PSDL_Surface); //Prozedur wird definiert, nimmt die 4 Kordinatenpunkte als Integer und das handle des Screens auf den gezeichnet werden soll.
begin
for tempInt2 := x1-1 to x2 do begin //erste Schleife, erhöht nur den x-Wert
for tempint3 := y1-1 to tempint2 do begin //zweite Schleife, erhöht den y-Wert
NEW(pixellocation);
WRITE('Pitch value: ',handle^.pitch DIV handle^.format^.BytesPerPixel); //Pointer wird erzeugt und definiert.
pixellocation := handle^.pixels+tempint2+(tempint3*handle^.w); //Pointer wird auf x + y*breite des screens gesetzt.
pixelcolor:=SDL_MapRGB(handle^.format, 255, 0, 255); //pixelfarbe wird definiert
pixellocation^ := pixelcolor; //Pixel wird gefärbt.
end;
end;
end;
Hat jemand eine Idee wie sich das beheben lässt (bzw. ob das ganze so überhaupt funktioniert?
Edit: Es liegt an der Stelle:
WRITE('Pitch value: ',handle^.pitch DIV handle^.format^.BytesPerPixel); - die stammt so relativ direkt aus dem Tutorial hier.