Hallo Besucher, der Thread wurde 1,1k mal aufgerufen und enthält 4 Antworten

letzter Beitrag von CasualRobert am

Sprite zum laufen bringen

  • Hallo,
    Ich habe ein Problem und zwar(auf wenn ich ihn eigentlich bewegen kann) einen Bug den ich nicht lösen kann.
    Der Bug ist das der Sprite bei Adresse 53248 bis 235 läuft und, dann Adresse 53264 auf 1 schaltet damit es eben ohne error endet. Nur wenn ich dann zurücklaufe endet er in eineim Quantity error(siehe anhang)
    Der Code dazu ist dieser hier:


  • Auch der Ansatz ist insgesamt sehr fragwürdig: mehrere Schreibzugriffe auf die x,y-Positionsregister des ersten Sprites, und unmotiviertes "Mitändern" der unteren 8 Bits des x-Wertes, wenn Positionen > 255 angefahren werden sollen, und das funktioniert dann auch nur für Sprite 1.


    Also: in den Variablen X und Y hältst Du mal ganz einfach die x- und y-Koordinaten des Sprites, sorgst dafür, daß sie geändert werden können, und sperrst sie mit geeigneten IF ... THEN zwischen Grenzen ein. Erst mal völlig in Unkenntnis, wie das dann nachher in Hardware-Register geschrieben wird.


    Wenn Du das richtig hinbekommen hast, und nur dann, machen z.B. folgende POKEs genau das richtige:


    POKE53248,XAND255:POKE53249,Y:POKE53264,PEEK(53264)AND254OR-(X>255)


    Natürlich darf Y hier nur die Werte 0..255 annehmen, X sinnvollerweise 0..511. Die Koordinaten, bei denen das Sprite sichtbar ist, bzw. nicht bereits teilweise in Rahmen verschwindet, liegen aber in jedem Fall innerhalb dieser Bereiche.



    Weil dieses Auseinanderfriemeln der x-Koordinate einigermaßen umständlich ist, hab ich mal in einem Fall, wo *drei* übereinander liegende Sprites zusammen bewegt werden sollten, auf eine kleine Maschinencode-Routine zurückgegriffen. BASIC ist bereits zu langsam, als daß man mehrere Sprites gleichzeitig bewegen könnte ohne daß man sieht, daß sie sich geringfügig gegeneinander verschieben:


    "Bildschirmschoner" in C64 Basic


    Dort übernimmt der Befehl SYS679,X,Y die Koordinaten (X=0..511, Y=0..255) und setzt sie gleichzeitig für Sprite 0, 1 und 2.