2016-05-16 9 views
0

wie Titel, ich weiß, wie man im 13h-Modus zeichnen, aber keine Ahnung, wie man es auf dem Bildschirm bewegt, nächstes würde die Form zwingen, von Kanten zu prallen der Bildschirm, ich denke, die Form in Schleife neu zu zeichnen ... aber nicht so sicher, wie ich gerade mit der Montage begann, arbeite ich an Tasm. Danke für Anregungen.wie man Formen für zB Quadrat in Assembly x86 Sprache bewegt

+1

Poste deinen Code, um ihn zu verbessern. –

+1

Warte auf Vsync. Löschen Sie den Bildschirm. Zeichnen. Wiederholen.Es ist nicht klar, mit was genau du Probleme hast, also musst du genauer sein, es sei denn du möchtest, dass diese Frage endet. – Michael

+0

Zeichnung in Assembly ist wie @Michael beschreibt es. Es liegt ganz bei Ihnen, den Bildschirm neu zu rendern, wenn Sie möchten, dass etwas "bewegt" wird. Ich würde vorschlagen, dass Sie mit vsync beginnen und löschen, wie Michael tut. Danach kannst du dein Spiel ändern, indem du nur Änderungen in vsync überschreibst und dir mehr Zyklen gibst, um andere Sachen zu machen. –

Antwort

2

Nicht im Zusammenhang mit der Montage überhaupt. Wenn Sie wissen, wie man Formen im 13-Stunden-Modus zeichnet, machen Sie einfach die mentale Übung. Stellen Sie sich vor, wie der Inhalt des Videospeichers (a000: 0000) aussieht, wenn Sie das Quadrat an der ersten Position zeichnen, und stellen Sie sich den Inhalt von vram vor, wenn sich das Quadrat an der zweiten Position befindet.

Der Unterschied zwischen diesen beiden ist das erforderliche Minimum zwischen den Schritten, um diesen Effekt der Formbewegung zu erzielen. Wenn Sie den gesamten Bildschirm löschen und die Form neu zeichnen, erreichen Sie dies, aber wie Sie sich vorstellen können, wird Vram mehr als das erforderliche Minimum geschrieben.

Viele Spiele dev Forschung in den frühen Jahren wurde ausgegeben, um so minimale Änderungen zu erhalten, wie praktisch möglich, um viele grafische Änderungen auf langsamen CPUs zu ermöglichen. Bei einigen frühen Computern kann sogar etwas so Einfaches wie "Bildschirm löschen" mehr Zeit in Anspruch genommen haben als ein Einzelbild auf dem Display, d. H. Es war unmöglich, den Bildschirm ohne "Reißen" -Effekt zu löschen. In einem solchen Fall würde der naive Ansatz, die Bildschirm- und Zeichenform in einer neuen Position zu löschen, zu einem starken Blinken der Form führen (da einige Anzeigerahmen den klaren Bildschirm anstelle der Form zeigen würden).

Das Blinken/Tearing wurde später durch doppelte (dreifache) Bildschirmpufferung vermieden - das fertige Bild zuerst im Offscreen-Speicherpuffer vorbereiten, dabei das alte Bild sichtbar halten und dann den gesamten Puffer so schnell wie möglich schalten (on einige gfx-karten ist es möglich, die adresse von vram zu wechseln, so ist es billige funktion der einrichtung von gfx register, auf einigen computern musste man den puffer byte nach ziel kopieren .. Der VGA DOS 13h modus erlaubt vram address set IIRC, aber Ich kann mich nicht erinnern, ob Sie in eine andere 64k RAM-Region gehen können, oder Sie sind auf ein 1000-Segment fixiert und können daher den Puffer nicht verdoppeln). Ein weiterer üblicher Ansatz war die Aktualisierungstechnik "Dirty Rectangles", bei der Sie zuerst die Begrenzungsrahmen aller sich bewegenden/ändernden Grafikelemente auswerteten, Bereiche von vram berechneten, die aktualisiert werden müssen, dann nur diese Bereiche vollständig neu zeichnen und den Rest von vram intakt halten .

All dies ist nur Manipulation von Werten in Video RAM, können Sie dies in der gleichen Weise in Assembly, C, Pascal, was auch immer tun ... (eigentlich Javascript + Leinwand funktioniert auf die gleiche Weise, so dass alle Grundsätze gelten). Moderne gfx-API bietet normalerweise gute Methoden, um große Bereiche von vram leicht zu aktualisieren, wie füllen Form, zeichnen Sprite (Kopieren von Werten aus Offscreen-Sprite-Puffer in Vram), Mischen (Wert wird nicht nur in vram geschrieben, sondern mit alten Wert von einigen gemischt Mischalgorithmus), etc ...

Eigentlich war eine Familie von Tricks, die Werte in Vram selbst nicht zu berühren (was CPU-teure Operation ist), sondern eine Illusion der Bewegung durch Ändern der Palettenwerte (nur wenige Zelte/Hunderte) Beispiel: http://www.effectgames.com/effect/article.psp.html/joe/Old_School_Color_Cycling_with_HTML5

Also, wenn Sie diese Frage stellen müssen, sollten Sie wahrscheinlich ein paar mehr sieht, wie das Bild bei der Anzeige erstellt wird, wie es den Inhalt des Videospeichers und was du damit machen kannst.

Für eine andere geistige Herausforderung, googeln für Atari 2600 specs, hatte es überhaupt keinen Video-RAM, mussten die Spiele das Bild neu erstellen, indem Video-Chip-Register auf der Flucht Zeile für Zeile einrichten, während der Rest berechnet der Spiellogik dazwischen. Dies kann Ihnen ein tieferes Verständnis dafür geben, wie Computer Dinge anzeigt.

+1

Wie so oft bei diesen "wie mache ich * X * in asm" ist die Antwort "das gleiche wie in jeder anderen Sprache". Ich denke, Anfänger fangen oft an, über bestimmte Anweisungen sofort nachzudenken und treten nicht zurück und schauen sich an, welcher Algorithmus und welche Datenbewegung tatsächlich passieren muss. –

Verwandte Themen