SSHAPE (BASIC 3.5)

From C64-Wiki
Jump to navigationJump to search
Under Construction Site / Sign
Language German TO Language:english
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

  1. im gesamten Variablenbereich,
  2. 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.


BASIC V7.0 Commands

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