Frage zur X-Position von Sprites

Es gibt 8 Antworten in diesem Thema, welches 1.739 mal aufgerufen wurde. Der letzte Beitrag (1. März 2015 um 22:53) ist von enthusi.

  • Hallo!

    Während eines Tests mit einer kleinen Routine zum Spritemultiplexing ist mir etwas
    aufgefallen, was ich mir nicht erklären kann. Hier erstmal der Code:


    Assembliert werden kann der Code mit dem Dreamass. Eine ausführbare PRG ist auch im Anhang.
    Im Anhang ist ein Screenshot, der mein Problem im WinVICE zeigt. Zwischen den beiden Sprites sieht
    man den X-Versatz von einem Pixel.

    Meine Frage ist nun, warum tritt dieser Versatz von einem Pixel auf?
    Weil die Subroutine ANIMATE zuerst aufgerufen wird, wäre meine Erwartung gewesen, dass
    alle beide Sprites ohne X-Versatz untereinander gezeichnet werden. Was ist hier faul?


    Danke im Voraus.

  • Du hast xpos ja bereits um 1 erhoeht wenn es angezeigt wird in Rasterzeile 100.

    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.

  • Setz den Aufruf von Animate einfach direkt nach dem ersten setzen des SpritePointers.
    Dann sollte es gehen... (ungetestet)


    VORHER:


    SO SOLLTE ES GEHEN:


    lg, duke

  • Das Problem wird auch verschwinden, sobald in der Schleife noch mehr gemacht wird. Im Augenblick wird das zweite Sprite ja verschoben angezeigt, weil der Rücksprung zum Schleifenanfang zu früh passiert (nämlich sofort, noch bevor das Sprite gezeichnet wurde).

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • Das Problem wird auch verschwinden, sobald in der Schleife noch mehr gemacht wird. Im Augenblick wird das zweite Sprite ja verschoben angezeigt, weil der Rücksprung zum Schleifenanfang zu früh passiert (nämlich sofort, noch bevor das Sprite gezeichnet wurde).


    Korrekt

    eine kleine Schleife vor dem jmp REPEAT reicht ebenfalls.

    Code
    ldx #0
    loop
                dex
                bne loop
    
                jmp repeat
  • Man kann die neue Y-Pos auch direkt in der nächsten Zeile ändern, um das timing zu entschärfen.

    Es ist praktisch unmöglich, ein schnelles Programm zu schreiben, wenn man es in Basic programmiert.

  • Guten Abend,

    danke erstmal an alle.
    Werde Morgen, nachdem ich alle Antworten durchgegangen bin, nochmal ausführlicher dazu schreiben
    und evtl. weitere blöde Fragen stellen ...


    Bis bald.
    fireworker

    Der Weltraum ist unendlich groß, Miss Lander, und es ist alles in diesem Universum möglich.

  • Hallo,

    so - zurückgekehrt von einem vollgepackten Wochenende habe ich mir eben die Routine nochmal angeschaut
    und mit Eurer Hilfe fiel es mir plötzlich wie Schuppen von den Augen. Mir ist der genannte X-Versatz nun vollkommen klar.
    Denn es ist ja so, dass das Setzen der X-Position nur ein paar wenige Taktzyklen später gemacht wird, nachdem das
    jmp REPEAT die Schleife wieder beginnt. Der VIC befindet sich dann aber noch innerhalb Rasterzeile 100. Also noch am
    Anfang vom unteren Sprite und dieser ist zu diesem Zeitpunkt noch nicht gezeichnet ...

    Danke an alle. Problem geklärt. :thanx:


    Viele Grüße
    Michael

    Der Weltraum ist unendlich groß, Miss Lander, und es ist alles in diesem Universum möglich.

  • Eine kleine Ergaenzung vielleicht noch.
    Anders als Y position, wird eine neue Xposition auch pro Zeile IM Sprite umgesetzt.

    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.