PEN

Aus C64-Wiki
Zur Navigation springenZur Suche springen
PEN
Format: PEN(<n>)
Parameter
<n>: numerischer Ausdruck im Wertebereich von 0 bis 4
Einordnung
Typ: numerische Funktion
Kontext: Ein/Ausgabe
Aufgabe: Lightpen-Position ermitteln
Abkürzung: pE
Verwandte Befehle
BUMP, COLLISION, JOY, POT

Anmerkung: Dieser Artikel beschreibt die BASIC-Funktion PEN ab Commodore BASIC V7.0 oder höher.

Die Funktion PEN dient dazu, die Position eines Lightpen-Impulses abzufragen.

Gültige Werte für den Parameter n sind:

  • 0: ermittelt die X-Koordinate des LP-Impulses auf dem 40-Zeichen-Bildschirm (VIC).
  • 1: ermittelt die Y-Koordinate des LP-Impulses auf dem 40-Zeichen-Bildschirm.
  • 2: ermittelt die Zeichenspalten-Position auf dem 80-Zeichen-Bildschirm (VDC).
  • 3: ermittelt die Zeichenzeilen-Position auf dem 80-Zeichen-Bildschirm.
  • 4: ermittelt, ob der VDC einen LP-Impuls registriert hat und somit die Koordinaten gültig sind.

Andere Werte für n verursachen einen ?ILLEGAL QUANTITY ERROR.

Die ermittelten Werte auf dem 40-Zeichenbildschirm entsprechen nicht den Grafikkoordinaten, sondern sind wie bei den Sprites reale, unskalierte, Bildschirmkoordinaten. Zur Umrechnung in Grafikkoordinaten muss von der Y-Koordinate der Wert 50 subtrahiert werden, der von der X-Koordinate zu abzuziehende Wert unterscheidet sich dagegen von System zu System und sollte daher über eine Kalibrationsroutine (siehe Beispiel) ermittelt werden. Die Koordinaten sind nur gültig, wenn beide ungleich 0 sind.

Auf dem 80-Zeichen-Bildschirm werden keine Pixelkoordinaten ermittelt, sondern Zeichenspalten- und -zeilenposition des Impulses. Diese Positionswerte müssen ebenfalls erst in Koordinaten des Textfensters umgerechnet werden. Die für den 80-Zeichen-Bildschirm ermittelten Werte sind nur gültig, wenn PEN(4) den Wert 1 liefert.

Ein Lightpen-Impuls auf dem 40-Zeichenbildschirm löst immer auch einen Impuls auf dem 80-Zeichen-Bildschirm aus und umgekehrt.

Eine PEN-Abfrage kann auch ohne COLLISION durchgeführt werden.

Beispiel[Bearbeiten]

10 COLOR 0,1:COLOR 1,2:COLOR 4,1
20 GRAPHIC 1,1
30 CHAR 1,10,0,"LIGHTPEN KALIBRIEREN"
40 CHAR 1,9,2,"WEISSE LINIE ANKLICKEN"
50 DRAW 1,159,48 TO 159,96
60 COLLISION 3,1000
70 DO:LOOP UNTIL KX
80 COLLISION 3
90 COLOR 0,2:COLOR 1,1
100 SCNCLR 1
110 COLLISION 3,2000
120 DO:GET K$:LOOP UNTIL K$="X"
999 END
1000 COLLISION 3:IF JOY(1) AND 1 THEN KX=PEN(0)-159
1010 COLLISION 3,1000:RETURN
2000 COLLISION 3:PX=PEN(0)-KX:PY=PEN(1)-50
2010 IF JOY(1) AND 1 THEN DRAW 1 TO PX,PY:ELSE LOCATE PX,PY
2020 COLLISION 3,1000:RETURN

In diesem Beispiel wird zuerst der X-Offset kalibriert, um anschließend mit dem Lightpen freihändig auf dem 40-Zeichen-Hires-Bildschirm zu zeichnen. Man beachte, dass ein Lightpen mit einem Taster vorausgesetzt wird.