atarixle.deWillkommen bei atarixle

05.10.2024, 11:07

Mit DRAWTO außerhalb des Bildschirms zeichnen

Moderne Betriebssysteme, Spiele und andere Grafikprogramme haben eins gemeinsam: Deren Programmierer haben begriffen, dass der Bildschirm nur einen kleinen Ausschnitt dessen zeigt, was um den User oder Spieler herum so passiert.
Leider gilt dies nicht für unseren kleinen Atari bzw. dessen BASIC-Varianten.
Dessen Befehl DRAWTO quittiert das Zeichnen außerhalb des Bildschirms mit einer Fehlermeldung - genaugenommen mit zweien.
Und genau hier setze ich an, um Linien abhängig vom Sichtfeld auch außerhalb des Bildschirms enden zu lassen.
Technisch gesehen besteht eine Linie ja aus vielen aneinander gereihten Pixeln. Diese Pixel zeichnet der Atari nacheinander. Die Fehlermeldung, wenn man zu weit rechts bzw. unten zeichnet, kommt erst, wenn der Atari den ersten Punkt außerhalb des Schirms zeichnen will. Sichtbare Punkte wurden aber schon gezeichnet.
Fängt man den Fehler mit einem TRAP-Befehl ab (das Try-Catch des alten Mannes), so erhält man einen flüssigen Ablauf des ganzen.
In Code ausgedrückt müsste das ganze also so aussehen:
100 GRAPHICS 8+16:COLOR 1
110 TRAP 120:PLOT 160,96:DRAWTO 450,29
120 REM
Umgekehrt funktioniert das ganze leider nicht. Man kann keine Linie von außerhalb nach innerhalb des Bildschirms zeichnen, weil das erste Pixel dann bereits einen Fehler verursacht und die Linie im sichtbaren bereich nicht fortgesetzt würde.
Eine Kontrolle, ob der Anfang oder das Ende innerhalb des Bildschirms liegen, und die eventuelle Umkehr der Zeichenrichtung, schafft etwas Abhilfe:
100 GRAPHICS 8+16:COLOR 1
110 READ X1,Y1,X2,Y2:IF X1=-999 THEN 490
120 TRAP 150
130 IF X1>319 OR Y1>191 THEN PLOT X2,Y2:DRAWTO X1,Y1
140 PLOT X1,Y1:DRAWTO X2,Y2
150 REM
490 GOTO 490:REM zum Beenden Break drücken!
500 DATA 0,0,450,87
501 DATA 330,16,19,23
502 DATA -999,0,0,0
Leider funktioniert das ganze nicht, wenn man links bzw. oberhalb des Bildschirms zeichnen möchte, denn Atari-BASIC bemängelt hier bereits die negativen Werte, die dem DRAWTO-Befehl mitgegeben werden, z.B. DRAWTO -10,-10.
Auch kann man keine Linie zeichnen, deren Enden außerhalb des Bildschirms liegen, die aber durch den sichtbaren Bereich durch führt (z.B. von 160, 195 nach 329,96).
Händisches Pixeln der Linie bzw. eine kompatible Maschinenroutine wären hier hilfreich.