SSHAPE (BASIC 3.5)
TO |
This article has recently been imported from the German C64-Wiki and not been translated yet. Please come back at a later time to read the English version of this article or help us. |
BASIC keyword | |
Keyword: | SSHAPE |
Abbreviation: | S SHIFT+S |
Type: | Function |
Token code: | $e4 (228) |
Handling routine in BASIC ROM: |
|
List of all BASIC keywords |
Remark: This article describes the BASIC function SSHAPE in Commodore BASIC V3.5 or higher.
Type: Function General Programming-Syntax: SSHAPE <Variable>, [<Coordinates1> [, [<Coordinates2>] ]
The SSHAPE function stores the image of a portion of the bitmap screen into a text string variable.
Another sprite commands in BASIC 7.0 are MOVSPR, RSPCOLOR, RSPPOS, RSPRITE, SPRCOLOR, SPRITE, SPRDEF and SPRSAV, also BUMP, COLLISION and GSHAPE.
Examples[edit | edit source]
Animation[edit | edit source]
10 GRAPHIC 1,1 20 DIM C$(95) 30 FOR I=32 TO 127 40 CHAR 1,0,0,CHR$(I) 50 SSHAPE C$(I-32),0,0,7,7 60 NEXT 70 T$="THIS IS THE PERFECT WAVE!" 80 GOSUB 1000 999 END 1000 FOR I=1 TO LEN(T$) 1010 GSHAPE C$(ASC(MID$(T$, I))-32),I*9,100+SIN(I*π/12)*24 1015 NEXT 1020 RETURN
This example copies the characters with the PETSCII codes from 32 to 127 into a string array and then uses them to produce the text "THIS IS THE PERFECT WAVE!" output in wave form on the graphic screen.
Shape-Daten anzeigen[edit | edit source]
100 GRAPHIC 1,1 110 DRAW 0,0 TO 7,7 120 B=FRE(1) 130 SSHAPE A$,0,0,0,250 140 GRAPHIC 0 200 PRINT "MEMORY-VERBRAUCH:" B-FRE(1) 210 PRINT "STRING-LAENGE:" LEN(A$) 220 A=POINTER(A$) 230 BANK 1 240 S=PEEK(A+1)+256*PEEK(A+2) 250 L=PEEK(A) 300 FOR I=S TO S+L-1 310 PRINT USING "#### ##### ##";I-S,HEX$(I),RIGHT$(HEX$(PEEK(I)),2) 320 NEXT
Liefert die textuelle Ausgabe (Auszug) Template:Ausgabe In der linken oberen Ecke wird eine 8 Pixel lange schräge Linie gezeichnet, die von 0 abweichenden Inhalt bei den Shape-Daten bewirkt. Dann wird ein Shape in maximaler Y-Ausdehnung angelegt, wobei dann der Platzverbrauch des SSHAPE-Aufrufs ermittelt
- im gesamten Variablenbereich,
- die in der einer befindlichen Daten
angezeigt wird. Schließlich wird der String Byte für Byte ausgelesen und angezeigt.
Der 264 Byte Variablenverbrauch ergibt sich aus 7 Byte Variable + 255 Byte String + 2 Byte String-Heap Verwaltungsdaten.
Grafik als Sprite übernehmen[edit | edit source]
100 GRAPHIC 1,1 110 DRAW 1, 0,0 TO 23,20 (Links oben eine Art Fadenkreuz zeichnen) 120 DRAW 1, 0,20 TO 23,0 125 BOX 1, 0,0, 23,20 130 CIRCLE 1,12,10,10 140 SSHAPE A$, 0,0,23,20 (Einen 24×21 Bereich entspr. Sprite-Ausdehnung kopieren ...) 150 SPRSAV A$,1 (... und als Muster für Sprite #1 nehmen) 160 SPRITE 1,1,11,0,1,1,0 (Sprite #1 rot, in beiden Richtungen ausgedehnt darstellen) 170 MOVSPR 1,160,100 (Sprite in Bildschirmmitte) 180 MOVSPR 1,120#7 (Sprite nach rechts unten durchlaufen lassen) 190 GETKEY K$ (auf Taste warten und ...) 200 GRAPHIC 0: MOVSPR 1,0#0 (Ende des Spuks)
Ein Beispiel für BASIC 7.0, bei dem eine grafische Form in ein Sprite übernommen wird.
Der Aufruf von SSHAPE in Zeile 140 kann auch auf diverse andere Arten erfolgen:
140 LOCATE 0,0 (Bezugspunkt für Verschiebungskoordinaten ...) 141 SSHAPE A$, +23,+20 (Einen 24×21 Bereich via relative Koordinaten)
oder
140 LOCATE 0,0 (Bezugspunkt für Vektorkoordinaten ...) 141 SSHAPE A$, 31.89;131.2 (Einen 24×21 Bereich via Diagonale, entspricht einer) (Uhrzeigerposition bei ca. 22 Minuten, also etwa zwischen 4 h und 5 h)
Die relativen Angaben, sei es mit Länge+Winkel oder Verschiebungswerten, beziehen sich immer auf den Pixelcursor, der zuvor gesetzt wurde oder sich ergeben hat. Insbesondere ein absolutes Koordinatenpaar im gleichen Befehl als erstes Koordinatenangabe ändert den Pixelcursor nicht für die 2. Koordinatenangabe.
ABS | AND | APPEND | ASC | ATN | AUTO | BACKUP | BANK | BEGIN | BEND | BLOAD | BOOT | BOX | BSAVE | BUMP | CATALOG | CHAR | CHR$ | CIRCLE | CLOSE | CLR | CMD | COLLECT | COLLISION | COLOR | CONCAT | CONT | COPY | COS | DATA | DCLEAR | DCLOSE | DEC | DEF FN | DELETE | DIM | DIRECTORY | DLOAD | DO | DOPEN | DRAW | DS | DS$ | DSAVE | DVERIFY | EL | ELSE | END | ENVELOPE | ER | ERR$ | EXIT | EXP | FAST | FETCH | FILTER | FN | FOR | FRE | GET | GET# | GETKEY | GO64 | GOSUB | GOTO | GRAPHIC | GSHAPE | HEADER | HELP | HEX$ | IF | INPUT | INPUT# | INSTR | INT | JOY | KEY | LEFT$ | LEN | LET | LIST | LOAD | LOCATE | LOG | LOOP | MID$ | MONITOR | MOVSPR | NEW | NEXT | NOT | (OFF) | ON | OPEN | OR | PAINT | PEEK | PEN | (PI) | PLAY | POINTER | POKE | POS | POT | PRINT | PRINT USING | PRINT# | PUDEF | (QUIT) | RCLR | RDOT | READ | RECORD | REM | RENAME | RENUMBER | RESTORE | RESUME | RETURN | RGR | RIGHT$ | RND | RREG | RSPCOLOR | RSPPOS | RSPRITE | RUN | RWINDOW | SAVE | SCALE | SCNCLR | SCRATCH | SGN | SIN | SLEEP | SLOW | SOUND | SPC( | SPRCOLOR | SPRDEF | SPRITE | SPRSAV | SQR | SSHAPE | ST | STASH | STEP | STOP | STR$ | SWAP | SYS | TAB( | TAN | TEMPO | THEN | TI | TI$ | TO | TRAP | TROFF | TRON | USR | VAL | VERIFY | VOL | WAIT | WHILE | WINDOW | WIDTH | XOR