Beiträge von BIF im Thema „SPRITES SETZEN mit Strings“

    Hier das Listing für das Spritesetzen mit Strings mit dem USR-SYNC in Zeile 24.


    Quellcode:
    10 :i=0:k=80:rem---sprite-setzen mit strings
    11 :print"[clr]sprite-setzen:":s=peek(648)*256:
    12 :b=s/64-1and255:fora=s+1016toa+7:pokea,b:next:fora=s-64tos-1:pokea,255:next
    13 :poke785,94:poke786,255:rem---usr=sync
    14 :
    15 :dima$(99):fori=.to40:rem---string-feld aufbauen
    16 :c$="":forb=.to7:c$=c$+chr$(24+b*24)+chr$(k):next:a$(i)=c$:k=k+1:next
    19 :
    20 :i=.:k=1:rem---bewegen
    21 :poke3,peek(51):poke4,peek(52):poke52,208:
    22 :poke51,len(a$(i)):poke51,usr(len(a$(i)+"")):poke53269,255
    24 :fori=itoi+39*kstepk:poke51,usr(len(a$(i)+"")):next
    25 :k=-k:ifpeek(198)=.goto24
    26 :poke51,peek(3):poke52,peek(4):geta$:poke53269,.


    Schönen Gruß.

    Der SYNC, also die Abstimmung mit dem Rasterstrahl fehlt bei meinem Listing auch noch.

    :sys65374: macht das in Basic.

    Eleganter ist es allerdings den SYNC mit usr() in die Berechnung einzubinden
    :poke785,94:poke786,255: setzt den USR-Vektor auf SYNC.

    Schönen Gruß.

    Stimmt wohl, da das Feld kein Stringfeld ist.
    Der Fehler ist in Zeile 15. Also dima(99) müßte dima$(99) sein.

    Quellcode:
    10 :i=0:k=80:rem---sprite-setzen mit strings
    11 :print"[clr]sprite-setzen:":s=peek(648)*256:
    12 :b=s/64-1and255:fora=s+1016toa+7:pokea,b:next:fora=s-64tos-1:pokea,255:next
    14:
    15 :dima$(99):fori=.to40:rem---string-feld aufbauen
    16 :c$="":forb=.to7:c$=c$+chr$(24+b*24)+chr$(k):next:a$(i)=c$:k=k+1:next
    19 :
    20 :i=.:k=1:rem---bewegen
    21 :poke3,peek(51):poke4,peek(52):poke52,208:
    22 :poke51,len(a$(i)):poke51,len(a$(i)+""):poke53269,255
    24 :fori=itoi+39*kstepk:poke51,len(a$(i)+""):next
    25 :k=-k:ifpeek(198)=.goto24
    26 :poke51,peek(3):poke52,peek(4):geta$:poke53269,.

    Schönen Gruß.

    Hallo, anscheinend hab ich in Zeile 12 noch eine -1 vergessen,
    was einen Fehler bei der Sprite-Installation gibt,
    daher hier noch mal die korrigierte Version.

    Quellcode:
    10 :i=0:k=80:rem---sprite-setzen mit strings
    11 :print"[clr]sprite-setzen:":s=peek(648)*256:
    12 :b=s/64-1and255:fora=s+1016toa+7:pokea,b:next:fora=s-64tos-1:pokea,255:next
    14:
    15 :dima(99):fori=.to40:rem---string-feld aufbauen
    16 :c$="":forb=.to7:c$=c$+chr$(24+b*24)+chr$(k):next:a$(i)=c$:k=k+1:next
    19 :
    20 :i=.:k=1:rem---bewegen
    21 :poke3,peek(51):poke4,peek(52):poke52,208:
    22 :poke51,len(a$(i)):poke51,len(a$(i)+""):poke53269,255
    24 :fori=itoi+39*kstepk:poke51,len(a$(i)+""):next
    25 :k=-k:ifpeek(198)=.goto24
    26 :poke51,peek(3):poke52,peek(4):geta$:poke53269,.


    Schönen Gruß.

    Hier noch einmal das Listing zur Stringpositionierung mit String-Kopie.
    So ähnlich kann man es natürlich auch in Maschinensprache machen.


    10 : rem---sprites.bewegen
    11 :print"[clr]sprite-schau"
    12 :a=15:forb=peek(648)*256+1016tob+7:pokeb,a:next:k=1:y=80
    13 :forb=a*64tob+63:pokeb,255:next
    19 :
    20 :a=53248:i=.:rem--strings aufbauen und setzen
    21 :c$="":forj=.to7:x=24+j*24:c$=c$+chr$(x)+chr$(y):next:gosub30:poke53269,255
    22 :geta$:ifa$=""then:y=y+k:i=i+1:on-(i<40)goto21:k=-k:goto20
    26 :poke53269,.:list
    29 :
    30 :rem---string-copy(c$,a)
    31 :poke782,peek(35+(c$<"")):poke781,peek(34+(c$<"")):poke780,len(c$)
    32 :poke54,a/256:poke53,a-peek(54)*256:sys46728:return

    Schönen Gruß.

    Das Funktions-Prinzip des Codes basiert darauf, daß es schneller ist einen String in den VIC zu übertragen, als zu poken.

    Dazu wird zuerst der Stringgrenzenzeiger auf den VIC verstellt und dann die Strings mit den Sprite-Positionen in den VIC kopiert.

    Das ganze funktioniert ähnlich, wie bereits in dem Listing zur Feststringverwaltung gezeigt.

    Schönen Gruß.

    Hier ein Basic-Code zum schnellen Sprite-Setzen mit Strings.


    Quellcode:
    10 :i=0:k=80:rem---sprite-setzen mit strings
    11 :print"[clr]sprite-setzen:":s=peek(648)*256:
    12 :b=s/64and255:fora=s+1016toa+7:pokea,b:next:fora=s-64tos-1:pokea,255:next
    14:
    15 :dima(99):fori=.to40:rem---string-feld aufbauen
    16 :c$="":forb=.to7:c$=c$+chr$(24+b*24)+chr$(k):next:a$(i)=c$:k=k+1:next
    19 :
    20 :i=.:k=1:rem---bewegen
    21 :poke3,peek(51):poke4,peek(52):poke52,208:
    22 :poke51,len(a$(i)):poke51,len(a$(i)+""):poke53269,255
    24 :fori=itoi+39*kstepk:poke51,len(a$(i)+""):next
    25 :k=-k:ifpeek(198)=.goto24
    26 :poke51,peek(3):poke52,peek(4):geta$:poke53269,.

    Schönen Gruß.