Software > Coding

Omikron Compiler bitblt

<< < (7/7)

mcknopf:
Hallo,
das mit dem = Zeichen habe ich inzwischen hin bekommen, der Tipp mit dem Scancode hat es doch gebracht, hab offenbar einfach eine Taste nicht noch mal ausprobiert gehabt, die es dann aber war (bei mir die " ' " Taste).
Zurück zu bitblt. Ich habe damit, wie bereits gesagt, Finescrolling realisiert, man kann mit dem bitblt Befehl vom 32 Pixel Bereich auch je 1-32 Pixel von rechts oder von oben vom Grafikblockspeicher auf den Bildschirm kopieren, aber von links oder von unten habe ich noch nicht hin bekommen.

Der Code dazu:
for sc=0 to 31 <- insgesamt 32 Durchläufe=32 Pixel scrollen
bitblt 33,32,192,168 to 32,32,192,168 <- Scrolling von links nach rechts
for yc=32 to 168 step 32
bitblt feld to 192-sc,yc,sc+1,32
next yc
next sc

das funktioniert gut, aber ist es auch möglich aus den Blockspeicher (hier "feld") von rechts nach links in den Bildschirmspeicher zu kopieren? Von links nach rechts ist es ja möglich z.B. nur eine Spalte zu kopieren, also von einem 32x32 Pixel großem Block per bitblt feld to 0,0,1,32 kopiert die erste Spalte von links auf den Bildschirm, aber ist es auch möglich z.B. nur die 32. Spalte des Blocks zu kopieren und falls ja, wie? Bisher habe ich es mit einem Trick hin bekommen, indem ich den ganzen 32x32 Pixel Block in den Statusbereich des Bildschirms (wo z.B. Score, Level angezeigt werden) kopiere und von dort dann halt z.B. die 32. Spalte in den Spielfeldbereich des Bildschirms, aber das sieht natürlich doof aus, wenn da immer im Statusbereich Grafikblöcke durchlaufen.

Vielleicht hat einer einer eine Idee?

czietz:

--- Zitat von: mcknopf am Mo 24.01.2022, 19:33:33 ---das mit dem = Zeichen habe ich inzwischen hin bekommen, der Tipp mit dem Scancode hat es doch gebracht, hab offenbar einfach eine Taste nicht noch mal ausprobiert gehabt, die es dann aber war (bei mir die " ' " Taste).

--- Ende Zitat ---

Das sieht immer noch danach aus, dass Du irgendwas (Host, Atari, ...) auf US-Layout konfiguriert hast. Leider hast Du die Ausgabe von hatari --trace keymap ja weiterhin nicht gepostet.

czietz:

--- Zitat von: mcknopf am Mo 24.01.2022, 19:33:33 ---aber ist es auch möglich z.B. nur die 32. Spalte des Blocks zu kopieren und falls ja, wie?
[...]
Vielleicht hat einer einer eine Idee?

--- Ende Zitat ---

Soweit ich das in Hatari sehe, ist das nicht möglich, da Omikron Basic die Bitblt-Startkoordinaten innerhalb Deines Datenblocks immer fest auf (0,0) setzt. Workaround, auf Kosten von deutlich mehr Speicherverbrauch: Lege jede Spalte in ein eigene Datenfeld; dann kannst Du natürlich jede Spalte einzeln "blitten".

Thorsten Otto:
Alternativ (da Omikron ja offensichtlich vro_cpyfm bei bitblt verwendet), vro_cpyfm selber aufrufen, statt die eingebaute bitblt Funktion. Dafür brauchst du (mindestens) das interne VDI-Handle, das Omikron benutzt. Ich gehe mal davon aus, daß man da irgendwie dran kommt.

Atari060:

--- Zitat von: mcknopf am Mo 24.01.2022, 19:33:33 ---Hallo,
das mit dem = Zeichen habe ich inzwischen hin bekommen, der Tipp mit dem Scancode hat es doch gebracht, hab offenbar einfach eine Taste nicht noch mal ausprobiert gehabt, die es dann aber war (bei mir die " ' " Taste).
Zurück zu bitblt. Ich habe damit, wie bereits gesagt, Finescrolling realisiert, man kann mit dem bitblt Befehl vom 32 Pixel Bereich auch je 1-32 Pixel von rechts oder von oben vom Grafikblockspeicher auf den Bildschirm kopieren, aber von links oder von unten habe ich noch nicht hin bekommen.

Der Code dazu:
for sc=0 to 31 <- insgesamt 32 Durchläufe=32 Pixel scrollen
bitblt 33,32,192,168 to 32,32,192,168 <- Scrolling von links nach rechts
for yc=32 to 168 step 32
bitblt feld to 192-sc,yc,sc+1,32
next yc
next sc

das funktioniert gut, aber ist es auch möglich aus den Blockspeicher (hier "feld") von rechts nach links in den Bildschirmspeicher zu kopieren? Von links nach rechts ist es ja möglich z.B. nur eine Spalte zu kopieren, also von einem 32x32 Pixel großem Block per bitblt feld to 0,0,1,32 kopiert die erste Spalte von links auf den Bildschirm, aber ist es auch möglich z.B. nur die 32. Spalte des Blocks zu kopieren und falls ja, wie? Bisher habe ich es mit einem Trick hin bekommen, indem ich den ganzen 32x32 Pixel Block in den Statusbereich des Bildschirms (wo z.B. Score, Level angezeigt werden) kopiere und von dort dann halt z.B. die 32. Spalte in den Spielfeldbereich des Bildschirms, aber das sieht natürlich doof aus, wenn da immer im Statusbereich Grafikblöcke durchlaufen.

Vielleicht hat einer einer eine Idee?

--- Ende Zitat ---

Ich verstehe jetzt nicht genau was das Problem ist. Du kannst Sachen ja auch ausserhalb des sichtbaren Bildschirmes blitten und zurück holen. Habe ich beim Scrolling von Endless Summer Surfing so gemacht und in anderen Projekten auch horizontal. Natürlich kannst Du auch Objekte (Sprites, ganzen Hintergrund, etc.) auch als Datei dem Programm hinzufügen.

LG

Chris

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln