PEN
PEN | |
Syntax: | 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 |
Token: | $ce $04 (206 4) |
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 | Quelltext 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.
APPEND | BANK | BEGIN | BEND | BLOAD | BOOT | BSAVE | BUMP | CATALOG | COLLISION | COLOR | CONCAT | DCLEAR | DCLOSE | DOPEN | DVERIFY | ENVELOPE | FAST | FETCH | FILTER | GO64 | MOVSPR | (OFF) | PEN | PLAY | POINTER | POT | (QUIT) | RECORD | RREG | RSPCOLOR | RSPPOS | RSPRITE | RWINDOW | SLEEP | SLOW | SOUND | SPRCOLOR | SPRDEF | SPRITE | SPRSAV | STASH | SWAP | TEMPO | WIDTH | WINDOW | XOR