Guten Abend.
Irgendwann vor geraumer Zeit tauchten mal Spiele mit prozeduralen Grafiken auf (in ASM).
Das was da Präsentiert wurde kann ich natürlich nichtmal annähernd erreichen.
Da ich in der Grafikgeneration großes Potential sehe (man kann z.B. Animierte Hintergründe oä gestalten indem man einige Parameter in der Prozedur verändert), habe ich mir überlegt, dass GDI+ (und WinAPI, aber das wird iwann nachgerüstet. Es ist ja alles im Aufbau) eigentlich alles nötige besitzt. Man muss ja das Rad nicht 10Mal neu erfinden.
Das vorliegende ist im Prinzip also alles nur GDI+, oder eigene Funktionen als Kürzel zusammengesteckt und von AutoIt interpretiert. Dabei geht die Übersicht zu 105% verloren, aber das is erstmal wurscht^^
Zum Beispiel zwei Beispiele:
Beispiel 1:
Dieses Bild wurde mit Folgendem Code erzeugt: 'Smo 4|Cle $v1|SBc $v2|FPi -$b,-$h,$b*3,$h*3,$i,5~0~360~10|SBc $v3|FEl -$b/3+$b*$i/$m,-$h/3+$h*$i/$m,$b*5/3-($b*$i/$m)*2,$h*5/3-($h*$i/$m)*2~1~90~1|Blur'
[Blockierte Grafik: http://i.imgur.com/bmNoJ.png]
Beispiel 2:
Die Folgenden Bilder unterscheiden sich in der Prozedur nur in 3 zeichen. (Die man auch als Parameter setzen könnte. Dann ist die Prozedur gleich und man muss nur einen Parameter ändern)
[Blockierte Grafik: http://i.imgur.com/wlBoi.png]
[Blockierte Grafik: http://i.imgur.com/24xZQ.png]
Vorteile der prozeduralen Lösung:
- Kaum Speicherverbrauch (in Kompillierter Form ca. 20 KB für den Interpreter und dann weniger als 1KB Pro Bild)
- (fast) Beliebige Bildmaße (je größer das Bild, desto länger dauert das erzeugen)
- Animation durch Veränderung von Parametern möglich.
- Man hat selbst bei AutoIt Programmen endlich einen grund für einen Ladebalken^^
- Einbau von Eigenen Funktionen möglich.
Nachteile:
- Schlechte Übersicht über den Code wenn er erstmal zusammengefasst ist. Zeilenweise kann man ihn mit etwas Mühe lesen wenn man die Funktionen hinter den Kürzeln kennt.
- Bilder können natürlich nicht erstellt werden. Nur relativ simple Grafiken (Vektorgrafiken, keine Bitmaps)
- Bei bisher sind nur sehr einfache Schleifen im interpretierten Code möglich. (ein For - Einzeiler. Mehrere zeilen gehen nicht)
- Langsame Ausführung wenn die Bilder größer werden. Gleichzeitiger Vorteil, da bei großen Bildern natürlich viel Speicher gespaart wird. So kann man große Grafiken nutzen, die sonst mehrere MB hätten und so nur ein paar Bytes verbrauchen)
Ich will hier eigentlich nicht groß auf den Putz hauen. Deshalb steckts auch im OffTopic.
Ich möchte nur die Meinung dazu, und ob sowas evtl jemand gebrauchen kann.
Aus eigenen Interessen (Vollbildspiele) werde ich das Thema sowieso so gaanz nebenbei weiterverfolgen.
zu guter Letzt das Skript
z. 10: Größe des Entstehenden Bildes verändern
z. 29f: Beispiel2
z. 25f: Beispiel1
Nach kleinen Veränderungen am Skript ist nun folgendes anzumerken:
- Grafiken lassen sich in Deutsch herstellen (Kein seltsames anderstsprachiges schreiben mehr)
- Es gibt eine Dokumentation über alle verfügbaren Befehle
- Ein GUI ist auch mit dabei
- Bilder können nun einfach gespeichert werden
- Es macht jetzt auch Spaß
Vor und Nachteile bleiben ähnlich, bis auf:
- Die Übersicht geht nicht mehr verloren, da man jetzt mit Returns eine Neue Zeile einleitet statt mit "|"
- Einige Befehle kamen im Update hinzu
- Jetzt einfach zu handhaben. (vorher musste man seltsame Buchstabenkombinationen im Programmcode verändern. Das macht das Programm jetzt selbst)
Um ein Bild zu generieren ist nunmehr folgendes nötig:
[Blockierte Grafik: http://i.imgur.com/5sRNn.png]
Kantenglättung: Ein
FülleAlles: 0xFF0090D8
ZufälligeKreise: 50,3,5,1,0x80FFFFFF,False
ZufälligeKreise: 500,1,2,2,0x80FFFFFF,False
Kantenglättung: Aus
PinselFarbe: 0x20FFFFFF
Wiederhole: 0,40,2
FülleRechteck: $b/80+$i*$b/40,0,$b/40,$h
PinselFarbe: 0x06FFFFFF
Wiederhole: 1,70,1
FülleEllipse: -$b/3+$b*$i/$m,-$h/3+$h*$i/$m,$b*5/3-($b*$i/$m)*2,$h*5/3-($h*$i/$m)*2
Weichzeichnen
Alles anzeigen
Das Programm macht dararaus dann:
00Ein|020xFF0090D8|0350,3,5,1,0x80FFFFFF,False|03500,1,2,2,0x80FFFFFF,False|00Aus|040x20FFFFFF|0D$b/80+$i*$b/40,0,$b/40,$h~0~40~2|040x06FFFFFF|0B-$b/3+$b*$i/$m,-$h/3+$h*$i/$m,$b*5/3-($b*$i/$m)*2,$h*5/3-($h*$i/$m)*2~1~70~1|0A
Ein Befehl endet, sofern er Parameter besitzt mit einem Doppelpunkt
Die Trennung mehrerer Befehle erfolgt durch ein Return
Parameter (nötig um das Bild zu animieren) können eingesetzt werden ($v1, $v2, $v3 und $v4), sind aber im GUI noch nicht eingebaut.
Der alte Dateianhang beinhaltet die vorherige Version (ohne alles so zu sagen^^)
Der Neue beinhaltet die Überarbeitete Fassung mit GUI.
lg
Mars(i)