LINE:n käyttöä nopsakkaan bittikartan piirtoon (maskaus,
esimerkissä siis hyödynnetty tekstin piirtoon taustaa tuhoamatta).
Pomputteleepi tekstinpaetkaeae ruudulla.
Aeaet ja oeoet kosahti, kun kirjotin tämän alunperin DOS:ssa.
DECLARE SUB DrawText (x%, y%, c%, s%, txt$)
CONST PI = 3.141592653589793# ' kulta-into pii
DIM SHARED fontdata%(128 * 8) ' 128*16 tavua tilaa, joista puolet turhaa %-)
DEF SEG = &HFFA6
FOR i% = 0 TO 127 ' 128 merkkiä (ts. 7bit ascii)
FOR j% = 0 TO 7 ' 8 riviä per merkki
fontdata%(i% * 8 + j%) = CVI(CHR$(0) + CHR$(PEEK(&HE + i% * 8 + j%)))
NEXT j%
NEXT i%
' nyt on 8x8 fontti bitmappina taulukossa
' setuppia
a% = 0: b% = 1
SCREEN 7, , a%, b%
' naseva teksti
teksti$ = "Hei aeiti, olen inte Njetissae"
' muutama maaginen muuttuja
halfx = LEN(teksti$) / 2
phase = 0
amp = 10
freq = 1
tinc = 1 / LEN(teksti$)
' tilastointia
stime = TIMER
frame& = 0
' luupix
WHILE INKEY$ = ""
dt = TIMER - stime
CLS
IF (dt > 0) THEN LOCATE 1, 1: COLOR 8: PRINT USING "FPS: ###.##"; frame& / dt
t = 0
' hilavitu
FOR i% = 4 TO 7
ytemp = 100 + COS(2 * i% * phase / 5) * 2 * amp
LINE (30, ytemp - 2)-(290, ytemp + 2), i%, BF
NEXT i%
' teksti kaeyraellae
FOR i% = 0 TO LEN(teksti$) - 1
x = 160 + (i% - halfx) * 8 * COS(phase / 3)
y = 100 + SIN(phase + (dt + i% * tinc) * 2 * 3.141592653589793# * freq) * amp
CALL DrawText(INT(x) - 5, INT(y) - 3, 2, 0, MID$(teksti$, i% + 1, 1))
CALL DrawText(INT(x) - 4, INT(y) - 4, 10, 0, MID$(teksti$, i% + 1, 1))
NEXT i%
phase = phase + PI / 100!
amp = amp + RND * .5 - RND * .5
SWAP a%, b% '
SCREEN 7, , a%, b% ' vaihetaan sivut päixeen
WAIT (&H3DA), 8 ' smoothii
frame& = frame& + 1
WEND
'
' parametrit:
' x%, y% paikka ruudulla, johon teksti tulostetaan
' c% väri
' s% kirjainten väli pixeleinä
' txt$ piirrettävä teksti
'
' optimointimahdollisuus:
' mikäli pidetään kirjainten väli 0:ssa, voidaan piirtää kaksi
' kirjainta samaan kerralla (16-bittinen maski)
'
SUB DrawText (x%, y%, c%, s%, txt$)
tx% = x%
FOR l% = 1 TO LEN(txt$)
ch% = ASC(MID$(txt$, l%, 1))
' whoa. unrollattu. vaikuttaa iha v*tusti
LINE (tx%, y% + 0)-(tx% + 7, y% + 0), c%, , fontdata%(ch% * 8 + 0)
LINE (tx%, y% + 1)-(tx% + 7, y% + 1), c%, , fontdata%(ch% * 8 + 1)
LINE (tx%, y% + 2)-(tx% + 7, y% + 2), c%, , fontdata%(ch% * 8 + 2)
LINE (tx%, y% + 3)-(tx% + 7, y% + 3), c%, , fontdata%(ch% * 8 + 3)
LINE (tx%, y% + 4)-(tx% + 7, y% + 4), c%, , fontdata%(ch% * 8 + 4)
LINE (tx%, y% + 5)-(tx% + 7, y% + 5), c%, , fontdata%(ch% * 8 + 5)
LINE (tx%, y% + 6)-(tx% + 7, y% + 6), c%, , fontdata%(ch% * 8 + 6)
LINE (tx%, y% + 7)-(tx% + 7, y% + 7), c%, , fontdata%(ch% * 8 + 7)
tx% = tx% + 8 + s%
NEXT l%
END SUBAiniin, tuon fontingrabbaussilmukan jälkeen pitäisi olla DEF SEG. Tuon puuttuminen *voi* aiheuttaa sekavaa toimintaa.
Ainiin, tuon fontingrabbaussilmukan jälkeen pitäisi olla DEF SEG. Tuon puuttuminen *voi* aiheuttaa sekavaa toimintaa.
no niinpä aiheuttaakin.. ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.