Sprites X-Achse

Es gibt 9 Antworten in diesem Thema, welches 1.790 mal aufgerufen wurde. Der letzte Beitrag (23. Juni 2010 um 14:38) ist von Mnemonic.

  • Hallo!

    Die Frage mag etwas doof sein, aber mit Sprites habe ich noch nicht sehr viel Erfahrung.

    Von Scherzen wie Sideboarder will ich gar nicht anfangen, mein Problem ist viel banaler.

    Und zwar hat man ja auf der X-Achse das Problem, das $FF/256 Positionen zu wenig sind, weil die Auflösung eben höher ist. Demzufolge kommt das Sprite, wenn man es auf $D000 "überlädt", einfach links wieder raus, statt die gewünschte Position im Screen einzunehmen, sagen wir mal spaßeshalber $100/256 --> wird einfach $00/0

    Bislang habe ich hierzu nur wenig gefunden und nix richtig Hilfreiches. Dabei müsste das doch eigentlich ein "alter Hut" sein. Danke Euch im Voraus für jede Hilfe.

  • Es gibt im Videoregister ein Bit, welches Du setzen musst um das Sprite Offset zu erzeugen. Wenn Du ein Handbuch hast, dort ist es im Anhang aufgeführt. Aus dem Kopf weiss ich es grad leider nicht.

    Ich werde nachher gleich mal nachsehen

  • 53264 Rechte Spriteposition aktivieren mit X=0 (alle aus) bis 255 (1, 2, 4, 8, 16, 32, 64, 128 für Sprite 0 bis 7; Kombinationen mit Addition der Werte für mehrere Sprites z.B. 3 für Sprite 0 und 1)

    Mit Hilfe dieses Register kannst Du für jedes Sprite die Position von 256 bis 320 (theoretisch 512) aktivieren.

    Gruss Lyso

  • Heureka! Da habe ich als Wiki-Autor wohl nicht gründlich genug gelesen, wie peinlich. Da steht es sogar noch klarer

    Zitat

    Überschreitet die X-Position den Wert 255, so muß das ensprechende Bit in Adresse 53264 (0x0d011) gesetzt werden.
    ...
    53264 Rechte Spriteposition aktivieren mit X=0 (alle aus) bis 255 (1, 2, 4, 8, 16, 32, 64, 128 für Sprite 0 bis 7; Kombinationen mit Addition der Werte für mehrere Sprites z.B. 3 für Sprite 0 und 1)

    Also heißt das gesuchte Register schonmal $d010. Das hilft bereits, danke. Jetzt muss ich das nur noch im Code verwursten. Wenn einer sowas als Beispiel irgendwo fertig rumliegen hat, sage ich natürlich nicht nein. :) Anderenfalls werde ich dann gelegentlich hier mal meine Lösung posten.

  • Ungefähr folgendes Prozedere :

    Spriteposition ins X-Register laden
    X-Register um 1 erhöhen
    Branch if carry not set nach Label1
    Wert von $D010 in den Akku laden
    mit 2 hoch Spritenummer ver AND en
    label1

    Nicht ganz Syntaxkonform, aber das Prinzip müsste klar sein

  • Sowas hier vielleicht?

    xlo geht dabei hauptsächlich deshalb von 0-7, weil sich so xhi relativ einfach in Buchstabenspalten umrechnen lässt, falls man das benötigt (ist aus nem Spiel). Kann man natürlich auch beliebig anders aufteilen.

    Hier noch die dazugehörige Routine, welche die x-Bewegung zu xlo und xhi hinzuaddiert:

  • Sehr schön, danke Euch beiden. Pseudo-Code war schon okay (bestätigte mir in etwa, das ich es verstanden habe), aber faul wie ich bin, freu ich mich natürlich super über Colts Schnipsel. :)

  • Das war kein Pseudocode sondern eine esoterische Programmiersprache...LOL

    Bitte melde dich an, um diesen Link zu sehen.


    Viele Grüsse...

  • Hmh. Habe das hier gefunden.

    Bitte melde dich an, um diesen Link zu sehen.

    Sieht recht einfach aus. Aber verstanden habe ich es auf Anhieb noch nicht ganz (was nicht an den Englischkenntnissen liegt, sondern am noch immer oberflächlichen Assemblerwissen). Werde mal versuchen, das einzubauen und berichten, ob das taugt, um die X-Positionen 256 bis 320 (512) zu nutzen. Vielleicht verstehe ich es danach besser ;)

  • Hi,

    schau' Dir evtl. das hier mal an...

    Bitte melde dich an, um diesen Link zu sehen.

    Ist ein recht anschauliches Beispiel von Roland, wie man das elegant lösen kann. Hat mir bei meinen ersten Gehversuchen zum Thema Sprites bewegen enorm geholfen!

    Grüßle,

    der Mnemonic

    Alle alphabetisch angeordnet einem in Satz sein sollten Worte.