Forum

sprites in basic programmeren C64  

  RSS
amiga4001
(@amiga4001)
Trusted Member

Eens zien ik wil sprites maken om een simpel vang spel te maken in basic.

Nu zit ik te lezen in het handboek van de C64 maar is mij niet helemaal duidelijk.

Wat bepaald vanaf welk geheugenadres de data voor de sprite staan?

Ik zie als voorbeeld een poke 2042,13 staan waarin 2042 dus spriteplaats 2 is maar waarom die waarde 13?

Of mischien een link waarin het wat handiger word uiteengezet?

ReageerCitaat
Geplaatst : 04/01/2018 10:11 pm
dmantione
(@dmantione)
Trusted Member

De VIC-II gebruikt de laatste 8 bytes van het schermgeheugen voor de spitepointers. Normaalgesproken begint het schermgeheugen op adres 1024 ($0400), het schermgeheugen is 1KB groot, dus eindigt op adres 2047 ($07FF). In dat geval zijn de laatste 8 bytes dus 2040 t/m 2047. Adres 2042 is dus de pointer voor sprite 2. Zou je het schermgeheugen verplaatsen, dan gaan de adressen van de spritepointers mee.

De waarde die je erin programmeert wordt maal 64 gedaan en dan wordt het startadres van de VIC-II erbij opgeteld. Standaard is het startadres 0. Een waarde 13 geeft dus 0 + 13*64 = 832. Je geeft dus aan dat de VIC-II sprite 2 moet zoeken op geheugenadres 832 ($0340). Dat is aan het begin van de cassettebuffer, een stukje geheugen dat niet in gebruik is als de datasette niet in gebruik is en daarom geschikt om sprite te plaatsen. Het geheugen van $1000 tot $1FFF kan je niet voor sprites gebruiken, omdat de VIC-II daar het karakter-ROM ziet. Als je in BASIC programmeert geen probleem, want dat geheugen is dan in gebruik voor je BASIC-programma.

ReageerCitaat
Geplaatst : 04/01/2018 10:53 pm
amiga4001
(@amiga4001)
Trusted Member

Alvast bedankt voor de reactie.

Het is mij nog steeds nu niet duideljk wat ervoor zorgt dat de data regels worden gezet op dat adres wat die poke aangeeft.

ReageerCitaat
Geplaatst : 05/01/2018 7:54 am
dmantione
(@dmantione)
Trusted Member

Nou, als ik het handboek erbij pak dan denk ik dat het om het voorbeeld met de ballon gaat. Regel 20 daarvan luidt:

20 FOR N=0 TO 62 : READ Q : POKE 832+N , Q : NEXT

Regel 20 is dan het antwoord op je vraag: De DATA-regels worden hier gelezen en de inhoud daarvan wordt naar geheugenlocatie 832 en verder gekopieerd.

ReageerCitaat
Geplaatst : 05/01/2018 3:57 pm
amiga4001
(@amiga4001)
Trusted Member

Ik begin er weer wat in te komen.

Ok nu snap ik de spriteopbouw weer en was aan het proberen met cursurtoetsen de sprite te laten bewegen.

Dus met deze: get a$ :if a$=chr$(145) then a=a+1

En die a zit dan aan de y positie van de sprite en dan natuurljk in een goto lus.

Maar als ik dat zo 4 keer doe met 4 verschillende variabelen voor x,y richting dan word mijn sprite wel erg langzaam.

Op vice dan weet het niet op een echte C64.

ReageerCitaat
Geplaatst : 06/01/2018 9:24 pm
dmantione
(@dmantione)
Trusted Member

Ja, rekenkracht daar blinkt de C64 niet in uit, je zult snel over willen stappen naar wat snellers, in praktijk machinetaal. Je kunt het wel iets verbeteren door er een soort formule van te maken in plaats van 4 keer een if then te doen.

ReageerCitaat
Geplaatst : 07/01/2018 10:16 pm
LJ
 LJ
(@lj)
Honorable Member

Een stukje machine code voor het updaten van de coordinaten maakt het al wat aangenamer, o.a. het knipperen van de sprite wanneer de X-positie voorbij de 255 gaat (MSB word gezet) kan dan ook worden verholpen door op rasterlijn positie 0 te wachten, de zgn. VBL (vertical blank).

ReageerCitaat
Geplaatst : 31/08/2018 10:47 pm
Share:
  
Bezig

Inloggen van Registreer aub