Verdoppeln der Auflösung ohne Änderung des Quellcodes

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Verdoppeln der Auflösung ohne Änderung des Quellcodes

Beitrag von Lebostein »

Hi,

im Zusammenhang mit der Diskussion um das Zoomen von Sprites (http://www.purebasic.fr/german/viewtopi ... 5&start=50) hatte ich grade eine Idee, bei einer geringen Auflösung eines (Retro-)Spiels (z.B. 320 x 240 oder 640 x 480) diese ohne Änderung des Quellcodes zu verdoppeln oder zu verdreifachen (da viele heutige Grafikkarten mit 320 x 240 zum Beispiel nicht mehr klarkommen). Ganz einfach durch "Überladen" der ganz normalen Sprite-Funktionen:

Includedatei: http://www.lebostein.de/tomysoft/temp/Zoomer.pb

Hier ein kleines Beispiel zum Testen:

Code: Alles auswählen

; mit dieser Zeile wird alles mit einer Auflösung x 2 dargestellt
; ohne den Code irgendwie zu verändern:

; ------------------------------------------
;IncludeFile "Zoomer.pb"
; ------------------------------------------

InitSprite()
InitKeyboard()

OpenScreen(640, 480, 32, "Sprite")

LoadSprite(1, #PB_Compiler_Home + "Examples/Sources/Data/PureBasic.bmp")
LoadSprite(5, #PB_Compiler_Home + "Examples/Sources/Data/Geebee2.bmp")
TransparentSpriteColor(5, $FF00FF)

add = 1

Repeat

  FlipBuffers()

  ClearScreen(RGB(0,0,0))

  For px = 0 To 3
  For py = 0 To 13
  DisplaySprite(1, px * 169, py * 36)
  Next py
  Next px

  DisplaySprite(1, x, x)

  ClipSprite(5, 0, 0, x, x/2)
  DisplayTransparentSprite(5, x, 100)
  DisplayTransparentSprite(5, 600-x, x)
  x + add

  If x > 400 Or x < 0: add * -1: EndIf

  StartDrawing(ScreenOutput())
  DrawText(10, 10, "Hallo")
  StopDrawing()

  ExamineKeyboard()

Until KeyboardPushed(#PB_Key_Escape)
Das es sich hierbei (nach dem Einfügen der Zeile IncludeFile "Zoomer.pb" um die doppelte Auflösung handelt, ist nur an der kleineren Textausgabe "Hallo" zu erkennen, da ja die 2DDrawing-Befehle davon nicht betroffen sind.

Natürlich könnte man an dem eigentlichen Zoomen des geladenen Sprites (hier über ImageResize realisiert) noch andere Möglichkeiten finden, aber an sich sollte die Vorgehensweise mit dem "Überladen" ohne Probleme funktionieren. Ich habe es jedenfalls schon erfolgreich an einigen meiner kleinen PB-Spiele mit geringerer Auflösung getestet.