Text ‘sanft‚ anzeigen

Für diesen Beitrag wurde das CBM prg Studio verwendet.
weitersagen ...
Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

CBM prg StudioEinen Text pixelweise anzeigen

Da es zur Zeit viel zu heiß ist und ich mich nur schwer konzentrieren kann, kommt hier mal wieder ein sehr simpler Effekt.

Möchte man den Blick auf eine Textzeile ziehen, dann ist es evtl. nicht so vorteilhaft, diese direkt als ganzes anzuzeigen. Befinden sich mehrere Infos auf dem Bildschirm, dann geht die Zeile evtl. unter. In solchen Fällen bietet es sich an, etwas Bewegung ins Spiel zubringen und so den Blick darauf zulenken.

 

Eine Textzeile zeichenweise ausgeben
Diese Aufgabe sollte eigentlich jeder selbst bewerkstelligen können, da sie aber Basis für unseren Effekt ist hier ein kleines Beispielprogramm.

Fürs Timing hängen wir uns in den bekannten Timer-Interrupt und legen die Adresse unserer IRQ-Routine ganz einfach an $0314/15 ab, außerdem löschen wir noch den Bildschirm clrScreen:.
Die Interrupt-Funktion ist dann relativ simpel. Da 60 Zeichen in der Sekunde etwas schnell ist, verzögern wir die Ausgabe mit einem kleinen Zähler charCounter:. Erreicht dieser null, dann holen wir die Position des nächsten Zeichens  charPos: ins X-Register und laden damit das zugehörige Zeichen aus unserem Text infoText: in den Akku. Nur solange das Zeichen größer null ist, geben wir es auf dem Bildschirm aus, setzen unseren Zähler charCounter: zurück und erhöhen charPos:. Dann wird zur Systemroutine nach $EA31 gesprungen. Stört euch bitte nicht am Label irq_0:, dass benötigen wir eigentlich erst beim nächsten Schritt.

Startet ihr das Programm jetzt, dann erscheint unsere Textzeile zeichenweise. Unterlegt ihr jedes Zeichen mit einem Ton (z. B. dem Geräusch einer Schreibmaschine) habt ihr schon einen netten Effekt.

 

Wie werden die Zeichen jetzt pixelweise angezeigt?
Um ehrlich zu sein, gar nicht! Wir täuschen ein pixelweises Einblenden nur vor. Dazu platzieren wir ein Sprite, dass die selbe Farbe wie der Hintergrund und die Größe eines Zeichens hat, direkt über der Stelle, an der das Zeichen ausgegeben wird. Dann geben wir das Zeichen, wie oben im Beispielprogramm, an dieser Stelle aus. Das Zeichen verschwindet hinter dem Sprite und ist erstmal unsichtbar. Jetzt bewegen wir das Sprite und lassen so das Zeichen ‘sanft‚ erscheinen. Dies wiederholen wir für alle Zeichen. Das hört sich jetzt evtl. komplizierter an, als es ist. Prinzipiell haben wir nämlich eben schon alle Vorbereitungen getroffen.

Also ergänzen wir unser Progrämmchen einfach…

Fügt ganz zu Beginn z. B. vor das sei folgenden Aufruf hinzu, um unser Sprite vorzubereiten.

 

Die benötigte Funktion sieht dann so aus:

Die Nr. des 64-BYTE-Blocks für das Sprite lassen wir diesmal vom Assembler berechnen. Da wir die ersten 16KB verwenden, können wir das so machen. Verschiebt ihr den sichtbaren Bereich des VIC-II, dann müsst ihr, bei dieser Art der Berechnung, noch eine Kleinigkeit beachten, dass sollte euch aber selbst einfallen. Die Einrichtung des Sprites sollte soweit bekannt sein. Einzige Besonderheiten sind, dass wir die Spritefarbe auf die Hintergrundfarbe $D021 setzen und die Startposition so wählen, dass das Sprite in der zweiten Textzeile erscheinen wird.

 

Jetzt müssen wir unsere IRQ-Routine noch anpassen. Dazu sind zunächst folgende drei Zeilen nötig, die direkt hinter dem bisher unnötigen Label irq_01: eingefügt werden.

Hier erhöhen wir einfach bei jedem IRQ die X-Position und sorgen natürlich auch dafür, dass ggf. das höchste BIT für die X-Position gesetzt wird. Da wir unsere Zählschleife immer mit $08 starten ist schon alles perfekt aufeinander abgestimmt. Ein Zeichen ist schließlich genau 8-Pixel breit. Das Sprite befindet sich so für jedes Zeichen an der richtigen Stelle und wir haben den Eindruck, dass der Text ganz soft eingeblendet wird.

Dann wollen wir noch dafür sorgen, dass die Spritebewegung auch wieder gestoppt wird, sobald der gesamte Text ausgegeben wurde. Dazu ändert das  beq irq_exit: in  beq irq_Stop: und fügt folgenden Block hinter das Ende der Interrupt-Funktion ein.

Hier wird einfach das Sprite abgeschaltet und der RAM-Vektor zurück auf die Adresse der System-Routine gesetzt.

 

Natürlich brauchen wir noch ein passendes Sprite. Das legen wir einfach mit BYTE-Anweisungen fest. Wir brauchen schließlich nur ein 8×8 Pixel großes, einfarbiges Sprite.

Wie gewohnt sorgen wir dafür, dass das Sprite an einer durch 64 teilbaren Adresse im Speicher liegt. Falls ihr die BYTES-Anweisung des CBM prg Studio-Assemblers noch nicht verwendet habt, diese erlaubt es euch schnell eine bestimmte Anzahl BYTEs zu erzeugen BYTES <Wert>*<Anzahl>.


Jetzt lasst eurer Fantasie freien Lauf. Hängt z. B. hinter den unduchsichtigen Bereich noch ein Schachbrettmuster oder andere Formen um das Erscheinen zu verändern. Warum muss das Sprite unsichtbar sein? Es könnte auch ein Auto oder Flugzeug sein, hinter dem der Text erscheint. Verwendet animierte oder mehrere Sprites, um weitere Effekte zu erzielen und kombiniert dies z. B. mit dem Color-Cycling. Natürlich lässt sich diese Technik auch verwenden, um Texte verschwinden zu lassen.

Ein erweitertes Beispiel im Java-Emulator starten oder als D64-Image herunterladen…


Schrott!!Naja...Geht so...Ganz gut...SUPER! (8 Bewertungen | Ø 5,00 von 5 | 100,00%)

Loading...


 

<<< zurück |

 

weitersagen ...
Tweet about this on TwitterShare on FacebookShare on Google+Share on LinkedIn

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Protected by WP Anti Spam