Startseite »
Forum »
RPG-Studio.org - Community »
Community-Forum »
Öffentliches Archiv »
RGSS »
Programmierhilfen »
CGT - Caesars Graphics Toolkit. V1
von Caesar
Die Grafikverarbeitung des Makers bietet doch nicht wirklich viele und gute Methoden, Grafiken dynamisch zu erzeugen, zu verändern, allgemein zu verarbeiten. Daher habe ich das CGT geschrieben, das jede Menge Grafikverarbeitung bietet.
Wie lassen sich die Werte zweier Integervariablen vertauschen?
Machen Sie mit und gewinnen Sie Ruhm und Ehre! ?"Caesar"?
Die kürzeste Lösung gewinnt. Gibt es mehrere richtige Einsendungen, wird ein zufälliger Gewinner aus diesen gezogen.
zum Lesen den Text mit der Maus markieren
Die Aufgabe der letzten Runde lautete:
Es hat keiner teilgenommen, daher gibt es keinen Gewinner ^^ Eine mögliche Lösung wäre gewesen:
Zitat
Schreiben Sie einen Parser für die ASCII-Form des Dateiformats PBM (Portable Bitmap). Die Methode soll als Parameter einen Dateinamen erhalten und eine Bitmap zurückgeben. 0 ist weiß, 1 ist schwarz. Eine Beispieldatei, die den Buchstaben 'A' darstellti:
![]()
Quellcode
1 2 3 4 5 6 7 8 9 10 11 P1 9 9 000010000 000010000 000101000 000101000 001000100 001111100 001000100 010000010 111000111
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def parse_pbm(filename)
f = File.open(filename)
return nil unless f.readline.chomp == "P1"
width, height = f.readline.split(' ').collect {|i| i.to_i}
bitmap = Bitmap.new(width, height)
c0 = Color.new(255, 255, 255)
c1 = Color.new(0, 0, 0)
for iy in 0...height
f.readline.chomp.split('').each_with_index do |v, k|
bitmap.set_pixel(k, iy, v == '0' ? c0 : c1)
end
end
return bitmap
end |
zum Lesen den Text mit der Maus markieren
...wie man zum Testen schnell einzelne Scripts "ausbaut", ohne das Script aus dem Scripeditor zu löschen?
Ganz einfach: Man fügt im Scripteditor ganz oben im Script die folgende Zeile ein:
und ganz unten als letzte Zeile:
Das hat den gleichen Effekt, wie wenn man das ganze Script aus dem Scripteditor gelöscht hätte.
|
|
Quellcode |
1 |
if false |
|
|
Quellcode |
1 |
end |
zum Lesen den Text mit der Maus markieren
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Monsta« (13. Juni 2007, 15:17)
Naja..einen hätt ich... Könnte man bei dem rechteck zeichnen nicht noch so machen, dass man die normalen Positionskoordinaten benutzen kann....
Weil ich hab ein mausskript, bei dem die Mauskoordinaten statt in Pixel, in den Feldrasterkoordinaten ausgegeben werden.
Vorschlag:
Wenn die X-Koordinate = 3 iss und Y-Koordinate = 2, dass es dann bei pixel X-65 und Y-33 anfängt... Also in der linken oberen Ecke des Feldes...
Ach noch was... Wie kann ich die einzelnen Sachen aufrufen??? wenn ich z.B.:
aufrufe, dann kommt folgende Fehlermeldung:
Was hab ich falsch gemacht???
Weil ich hab ein mausskript, bei dem die Mauskoordinaten statt in Pixel, in den Feldrasterkoordinaten ausgegeben werden.
Vorschlag:
Wenn die X-Koordinate = 3 iss und Y-Koordinate = 2, dass es dann bei pixel X-65 und Y-33 anfängt... Also in der linken oberen Ecke des Feldes...
Ach noch was... Wie kann ich die einzelnen Sachen aufrufen??? wenn ich z.B.:
Zitat
fill_rect_horizontal_gradient($game_variables[51], $game_variables[52], $game_variables[4876], 3, Color.red(12, Color.green(12
)
aufrufe, dann kommt folgende Fehlermeldung:
Zitat
NoMethodError occurred while running script.
undefined method ´fill_rect_horizontal_gradient'for # <Interpreter:0x131dec8>
Was hab ich falsch gemacht???
There was a Cave,
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
below a Silent's Grave.
Tunnels, extending far, running wide,
going deep into the World on the other Side.
Poor little Child, that was to brave,
died painfully deep down, in the Devil's Cave.
Eine Methode zum Umrechnen von Tile-Koordinaten nach Pixelkoordinaten wäre vielleicht hilfreich. Ich sammle erst mal Vorschläge und mach dann vllt eine Version 2 des CGT.
fill_rect_horizontal_gradient ist eine Methode der Klasse Bitmap, somit kannst du sie nur auf Bitmap-Objekte anwenden. Die meisten Methoden wirst du als vermutlich Nicht-Scripter nicht sinnvoll verwenden können. Die ganzen Methoden sind eher als Grundlage für neue Scripts gedacht.
Falls du die Funktionen trotzdem mal ausprobieren willst, kannst du im einem Call-Script mit folgendem Code eine Bitmap erzeugen und sie für ein paar Sekunden anzeigen lassen:
fill_rect_horizontal_gradient ist eine Methode der Klasse Bitmap, somit kannst du sie nur auf Bitmap-Objekte anwenden. Die meisten Methoden wirst du als vermutlich Nicht-Scripter nicht sinnvoll verwenden können. Die ganzen Methoden sind eher als Grundlage für neue Scripts gedacht.
Falls du die Funktionen trotzdem mal ausprobieren willst, kannst du im einem Call-Script mit folgendem Code eine Bitmap erzeugen und sie für ein paar Sekunden anzeigen lassen:
|
|
Quellcode |
1 2 3 |
sprite = Sprite.new sprite.bitmap = Bitmap.new(600, 400) #Höhe, Breite der Bitmap #sprite.bitmap.zeichne_irgendwas |
Wie lassen sich die Werte zweier Integervariablen vertauschen?
Machen Sie mit und gewinnen Sie Ruhm und Ehre! ?"Caesar"?
Die kürzeste Lösung gewinnt. Gibt es mehrere richtige Einsendungen, wird ein zufälliger Gewinner aus diesen gezogen.
zum Lesen den Text mit der Maus markieren
Die Aufgabe der letzten Runde lautete:
Es hat keiner teilgenommen, daher gibt es keinen Gewinner ^^ Eine mögliche Lösung wäre gewesen:
Zitat
Schreiben Sie einen Parser für die ASCII-Form des Dateiformats PBM (Portable Bitmap). Die Methode soll als Parameter einen Dateinamen erhalten und eine Bitmap zurückgeben. 0 ist weiß, 1 ist schwarz. Eine Beispieldatei, die den Buchstaben 'A' darstellti:
![]()
Quellcode
1 2 3 4 5 6 7 8 9 10 11 P1 9 9 000010000 000010000 000101000 000101000 001000100 001111100 001000100 010000010 111000111
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def parse_pbm(filename)
f = File.open(filename)
return nil unless f.readline.chomp == "P1"
width, height = f.readline.split(' ').collect {|i| i.to_i}
bitmap = Bitmap.new(width, height)
c0 = Color.new(255, 255, 255)
c1 = Color.new(0, 0, 0)
for iy in 0...height
f.readline.chomp.split('').each_with_index do |v, k|
bitmap.set_pixel(k, iy, v == '0' ? c0 : c1)
end
end
return bitmap
end |
zum Lesen den Text mit der Maus markieren
...wie man zum Testen schnell einzelne Scripts "ausbaut", ohne das Script aus dem Scripeditor zu löschen?
Ganz einfach: Man fügt im Scripteditor ganz oben im Script die folgende Zeile ein:
und ganz unten als letzte Zeile:
Das hat den gleichen Effekt, wie wenn man das ganze Script aus dem Scripteditor gelöscht hätte.
|
|
Quellcode |
1 |
if false |
|
|
Quellcode |
1 |
end |
zum Lesen den Text mit der Maus markieren
Cooles Skript! Teilweise echt genial (z.B. das Relief).
Doch wie sieht es mit einem Demoprojekt aus???
Doch wie sieht es mit einem Demoprojekt aus???
Skripte:
Animations "Entruckler"
Console
Drunken Mode
Eventskript Debugger
Flat-Events
Impassable Script
Item Shortcut
MSS: Monsta's Shoot System (Neu)
Radius Skript
Random Event Teleport
RMXP Leistungstest
Single Rotate
Split Screen (Beta)
Tutorials:
'alias' Bug beheben
Eigenes RTP
Standard KS komplett Übersetzen
RGSS: Eigener HUD
Programme:
Maker Exchange [ MEX ]
RMXP Skript Explorer
RPGXP Code Converter
Spiele:
[Minispiel] Stampfi V1.5 (Gold)
[Minispiel] Mastermind XP
[Humor] Verfressene Klone
______________________________
[Zukunft] Evil Science
zum Lesen den Text mit der Maus markieren
Eigentlich lässt sich das CGT schlecht demonstrieren, da es keinen bestimmten Anwendungszweck erfüllt, sondern eher Funktionen bereitstellt, die erst noch in Scripts eingebaut werden müssen. Ich arbeite trotzdem an einem Demoprojekt, um wenigstens ein paar Anwendungsbeispiele zu zeigen. Ich denke, Animationen lassen sich gut machen, ich denke da beispielsweise an Blinkeffekte mit dem Negativbild, "Auseinanderfliegen" mit der Shake-Methode oder vergiftete Battler mit einem starken Grünstich, oder allgemein bessere dynamisch erzeugte Grafiken wie Balken mit einem Farbübergang (draw_rect_horizontal_gradient) etc.
Da ist jedenfalls eine Menge machbar und einige Funktionen sind auch mehr für den Scripter als für den Spieler von Nutzen, z.B. die Farbkonstanten.
Die Demo kommt wahrscheinlich in den nächsten Tagen.
Da ist jedenfalls eine Menge machbar und einige Funktionen sind auch mehr für den Scripter als für den Spieler von Nutzen, z.B. die Farbkonstanten.
Die Demo kommt wahrscheinlich in den nächsten Tagen.
Wie lassen sich die Werte zweier Integervariablen vertauschen?
Machen Sie mit und gewinnen Sie Ruhm und Ehre! ?"Caesar"?
Die kürzeste Lösung gewinnt. Gibt es mehrere richtige Einsendungen, wird ein zufälliger Gewinner aus diesen gezogen.
zum Lesen den Text mit der Maus markieren
Die Aufgabe der letzten Runde lautete:
Es hat keiner teilgenommen, daher gibt es keinen Gewinner ^^ Eine mögliche Lösung wäre gewesen:
Zitat
Schreiben Sie einen Parser für die ASCII-Form des Dateiformats PBM (Portable Bitmap). Die Methode soll als Parameter einen Dateinamen erhalten und eine Bitmap zurückgeben. 0 ist weiß, 1 ist schwarz. Eine Beispieldatei, die den Buchstaben 'A' darstellti:
![]()
Quellcode
1 2 3 4 5 6 7 8 9 10 11 P1 9 9 000010000 000010000 000101000 000101000 001000100 001111100 001000100 010000010 111000111
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def parse_pbm(filename)
f = File.open(filename)
return nil unless f.readline.chomp == "P1"
width, height = f.readline.split(' ').collect {|i| i.to_i}
bitmap = Bitmap.new(width, height)
c0 = Color.new(255, 255, 255)
c1 = Color.new(0, 0, 0)
for iy in 0...height
f.readline.chomp.split('').each_with_index do |v, k|
bitmap.set_pixel(k, iy, v == '0' ? c0 : c1)
end
end
return bitmap
end |
zum Lesen den Text mit der Maus markieren
...wie man zum Testen schnell einzelne Scripts "ausbaut", ohne das Script aus dem Scripeditor zu löschen?
Ganz einfach: Man fügt im Scripteditor ganz oben im Script die folgende Zeile ein:
und ganz unten als letzte Zeile:
Das hat den gleichen Effekt, wie wenn man das ganze Script aus dem Scripteditor gelöscht hätte.
|
|
Quellcode |
1 |
if false |
|
|
Quellcode |
1 |
end |
zum Lesen den Text mit der Maus markieren
Hey Caesar, du scheinst dich mit der Grafikdarstellung beim Maker ja ganz schön gut auszukennen. Würdest du es auch hinbekommen den "Ripple" Effekt vom 2k für den XP zu programmieren. Ich habe zumindest noch kein Skript gesehen was das kann. Wenn es nicht geht, oder es zu lange dauert zum proggen ist es auch nicht so schlimm, wäre halt noch ein cooles Feature.
Skripte:
Animations "Entruckler"
Console
Drunken Mode
Eventskript Debugger
Flat-Events
Impassable Script
Item Shortcut
MSS: Monsta's Shoot System (Neu)
Radius Skript
Random Event Teleport
RMXP Leistungstest
Single Rotate
Split Screen (Beta)
Tutorials:
'alias' Bug beheben
Eigenes RTP
Standard KS komplett Übersetzen
RGSS: Eigener HUD
Programme:
Maker Exchange [ MEX ]
RMXP Skript Explorer
RPGXP Code Converter
Spiele:
[Minispiel] Stampfi V1.5 (Gold)
[Minispiel] Mastermind XP
[Humor] Verfressene Klone
______________________________
[Zukunft] Evil Science
zum Lesen den Text mit der Maus markieren
Ich wollt einen Text auf den Bildschirm schreiben mit
und plötzlich (im Spiel) kommt die Fehlermeldung (bei der ausführung von oberem Skript):
[SMILIE]Was mache ich falsch?[/SMILIE]
Zitat
draw_shadow_text( 200, 200, 200, 200, "beispiel", 0)
und plötzlich (im Spiel) kommt die Fehlermeldung (bei der ausführung von oberem Skript):
Zitat
??????NoMethodError??????
undefind methode 'draw_shadow_text' for #<Interpreter:0x45f8460>
[SMILIE]Was mache ich falsch?[/SMILIE]
Was mache ich falsch?
Du liest nie nach >.>
Caeser hat Funktionen für bestehende Klassen hinzugefügt, dazu muss man aber erstmal die Klasse Bitmap aufrufen, denn draw_shadow_text ist eine Funktion von ihr, aber du rufst gleich die Funktionauf und der Maker findet in der Klasse Interpreter nicht die Funktion und beendet sich. Wenn du die Funktion nutzen wilslt kannst du es ja so tun:
Löschen:
Aber wie Caeser schon schreib, es sind alles noch Grundlagen.
:respekt: Du hast echt praktische Funktionen bereitgestellt (Farbübergang und Kreiszeichnen), nur frage ich mich, ob man bestimmte Funktionen auch kombinieren kann z.B. einen Farbübergang im Kreis oder Durchlaufen alles Farben im Linienzeichen.
Mal guggen, wie man dies verwenden kann
Ave Abt
Du liest nie nach >.>
Caeser hat Funktionen für bestehende Klassen hinzugefügt, dazu muss man aber erstmal die Klasse Bitmap aufrufen, denn draw_shadow_text ist eine Funktion von ihr, aber du rufst gleich die Funktionauf und der Maker findet in der Klasse Interpreter nicht die Funktion und beendet sich. Wenn du die Funktion nutzen wilslt kannst du es ja so tun:
|
|
Quellcode |
1 2 3 |
@sprite = Sprite.new @sprite.bitmap = Bitmap.new(640, 480) #Höhe, Breite der Bitmap @sprite.bitmap.draw_shadow_text( 200, 200, 200, 200, "beispiel", 0) |
Löschen:
|
|
Quellcode |
1 2 |
@sprite.bitmap.dispose @sprite.dispose |
Aber wie Caeser schon schreib, es sind alles noch Grundlagen.
:respekt: Du hast echt praktische Funktionen bereitgestellt (Farbübergang und Kreiszeichnen), nur frage ich mich, ob man bestimmte Funktionen auch kombinieren kann z.B. einen Farbübergang im Kreis oder Durchlaufen alles Farben im Linienzeichen.
Mal guggen, wie man dies verwenden kann

Ave Abt
[color="green"]Ich muss einfach ma sagen, dass das Script wirklich nicht
Schlecht ist. ^^
Die ganzen Funktionen die du dadurch bereit stellst, sind
wirklich interessant. =)
Mehr kann ich nicht zu sagen. xD
bye Yatzumo
PS: Mein Kürzester Beitrag im Forum glaub ich. ._.
Abgesehen vom Chat Forum damals.[/color]
Schlecht ist. ^^
Die ganzen Funktionen die du dadurch bereit stellst, sind
wirklich interessant. =)
Mehr kann ich nicht zu sagen. xD
bye Yatzumo
PS: Mein Kürzester Beitrag im Forum glaub ich. ._.
Abgesehen vom Chat Forum damals.[/color]
Ich bin die Funktionen jetzt nochmal durchgegangen und ich finde sie als besser! Obwohl ich mich ein bischen ärgere das ich das Skript nicht schon vorher hatte, denn in meinem Aktuellen Spiel gibt es ein paar Balken im Hud und dafür wäre die Rechteck Funktion einfach nur Perfekt gewesen. Stattdessen musste ich 4 mal den "fill_rect" Befehl benutzen (für den Rahmen). Jetzt weiss ich nicht ob ich das noch im Nachhinein ändere, obwohl mir der "3D" Effekt ganz gut gefällt. Auch der "fill_rect_horizontal_gradient" Befehl wäre für eine HP Anzeige wohl ganz gut geeignet.
Was mir nicht so gut gefällt sind die Ladezeiten bei den Grafikeffekten, aber ich denke die sind dir auch schon aufgefallen^^ (Hast ja schon beim "Blur" geschrieben das es noch nicht perfekt ist)
Aber ansonsten wirklich spitze. Großes Lob von mir :-)
Was mir nicht so gut gefällt sind die Ladezeiten bei den Grafikeffekten, aber ich denke die sind dir auch schon aufgefallen^^ (Hast ja schon beim "Blur" geschrieben das es noch nicht perfekt ist)
Aber ansonsten wirklich spitze. Großes Lob von mir :-)
Skripte:
Animations "Entruckler"
Console
Drunken Mode
Eventskript Debugger
Flat-Events
Impassable Script
Item Shortcut
MSS: Monsta's Shoot System (Neu)
Radius Skript
Random Event Teleport
RMXP Leistungstest
Single Rotate
Split Screen (Beta)
Tutorials:
'alias' Bug beheben
Eigenes RTP
Standard KS komplett Übersetzen
RGSS: Eigener HUD
Programme:
Maker Exchange [ MEX ]
RMXP Skript Explorer
RPGXP Code Converter
Spiele:
[Minispiel] Stampfi V1.5 (Gold)
[Minispiel] Mastermind XP
[Humor] Verfressene Klone
______________________________
[Zukunft] Evil Science
zum Lesen den Text mit der Maus markieren
Erst mal danke für die ganzen Rückmeldungen!
@Monsta: Den Ripple Effekt werde ich wohl nicht hinkriegen und selbst wenn, wären die Rechenzeiten viel zu lang.
Die teilweise langen Rechenzeiten bei den aufwändigeren Bildverarbeitungen (blur, pixelize, emboss) lassen sich kaum vermeiden, aber sie sind doch eher eine kleine Spielerei, die wirklich nützlichen Methoden sind die zum Zeichnen von Linien, Kreisen, Rechtecken etc.
Ich weiß nicht, ob das noch was wird mit der Demo. Scripts zu machen, die auf dem CGT basieren, ist mir irgendwie zu (zeit-)aufwändig für eine Demo.
Aber ich werde das CGT auf jeden Fall in einigen meiner zukünftigen Scripts verwenden.
mfg
Caesar
@Monsta: Den Ripple Effekt werde ich wohl nicht hinkriegen und selbst wenn, wären die Rechenzeiten viel zu lang.
Die teilweise langen Rechenzeiten bei den aufwändigeren Bildverarbeitungen (blur, pixelize, emboss) lassen sich kaum vermeiden, aber sie sind doch eher eine kleine Spielerei, die wirklich nützlichen Methoden sind die zum Zeichnen von Linien, Kreisen, Rechtecken etc.
Ich weiß nicht, ob das noch was wird mit der Demo. Scripts zu machen, die auf dem CGT basieren, ist mir irgendwie zu (zeit-)aufwändig für eine Demo.
Aber ich werde das CGT auf jeden Fall in einigen meiner zukünftigen Scripts verwenden.
mfg
Caesar
Wie lassen sich die Werte zweier Integervariablen vertauschen?
Machen Sie mit und gewinnen Sie Ruhm und Ehre! ?"Caesar"?
Die kürzeste Lösung gewinnt. Gibt es mehrere richtige Einsendungen, wird ein zufälliger Gewinner aus diesen gezogen.
zum Lesen den Text mit der Maus markieren
Die Aufgabe der letzten Runde lautete:
Es hat keiner teilgenommen, daher gibt es keinen Gewinner ^^ Eine mögliche Lösung wäre gewesen:
Zitat
Schreiben Sie einen Parser für die ASCII-Form des Dateiformats PBM (Portable Bitmap). Die Methode soll als Parameter einen Dateinamen erhalten und eine Bitmap zurückgeben. 0 ist weiß, 1 ist schwarz. Eine Beispieldatei, die den Buchstaben 'A' darstellti:
![]()
Quellcode
1 2 3 4 5 6 7 8 9 10 11 P1 9 9 000010000 000010000 000101000 000101000 001000100 001111100 001000100 010000010 111000111
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def parse_pbm(filename)
f = File.open(filename)
return nil unless f.readline.chomp == "P1"
width, height = f.readline.split(' ').collect {|i| i.to_i}
bitmap = Bitmap.new(width, height)
c0 = Color.new(255, 255, 255)
c1 = Color.new(0, 0, 0)
for iy in 0...height
f.readline.chomp.split('').each_with_index do |v, k|
bitmap.set_pixel(k, iy, v == '0' ? c0 : c1)
end
end
return bitmap
end |
zum Lesen den Text mit der Maus markieren
...wie man zum Testen schnell einzelne Scripts "ausbaut", ohne das Script aus dem Scripeditor zu löschen?
Ganz einfach: Man fügt im Scripteditor ganz oben im Script die folgende Zeile ein:
und ganz unten als letzte Zeile:
Das hat den gleichen Effekt, wie wenn man das ganze Script aus dem Scripteditor gelöscht hätte.
|
|
Quellcode |
1 |
if false |
|
|
Quellcode |
1 |
end |
zum Lesen den Text mit der Maus markieren
Ich hab einen Bug gefunden:
Der "Emboss" Befehl also der Relief Effekt stürzt bei zu Großen Bildern ab. Hab's jetzt nicht genau durchgetestet aber Bilder mir 640x480 will er einfach nicht. Dann kommt nach einer kurzen Zeit einfach eine Fehlermeldung wo nur Fragezeichen stehen. Beim Blur Effekt kommt das selbe!
Wäre jetzt nicht so schlimm, wenn du es nicht gefixt bekommst, wollte dir aber dennoch bescheid sagen.
~Monsta~
Der "Emboss" Befehl also der Relief Effekt stürzt bei zu Großen Bildern ab. Hab's jetzt nicht genau durchgetestet aber Bilder mir 640x480 will er einfach nicht. Dann kommt nach einer kurzen Zeit einfach eine Fehlermeldung wo nur Fragezeichen stehen. Beim Blur Effekt kommt das selbe!
Wäre jetzt nicht so schlimm, wenn du es nicht gefixt bekommst, wollte dir aber dennoch bescheid sagen.
~Monsta~
Skripte:
Animations "Entruckler"
Console
Drunken Mode
Eventskript Debugger
Flat-Events
Impassable Script
Item Shortcut
MSS: Monsta's Shoot System (Neu)
Radius Skript
Random Event Teleport
RMXP Leistungstest
Single Rotate
Split Screen (Beta)
Tutorials:
'alias' Bug beheben
Eigenes RTP
Standard KS komplett Übersetzen
RGSS: Eigener HUD
Programme:
Maker Exchange [ MEX ]
RMXP Skript Explorer
RPGXP Code Converter
Spiele:
[Minispiel] Stampfi V1.5 (Gold)
[Minispiel] Mastermind XP
[Humor] Verfressene Klone
______________________________
[Zukunft] Evil Science
zum Lesen den Text mit der Maus markieren
huhu..
wirklich ein sehr schönes script.. werde es mit sicherheit gebrauchen..
kannst dir ja mal das hier anschauen und evtl. weitere Anregungen sammeln (wenn du das nicht schon getan hast, spontan ist mir noch keine Funktion eingefallen, die in deinem Script noch fehlt.. ^^)
btw.. bei größeren Bildern kann es allerdings gar nicht funktionieren.. soweit ich das erkennen kann, ändert das Script jeden Pixel einzeln, was ab einer bestimmen Größe einfach zu lange dauert (deshalb ists bei Monsta auch abgestürzt.. nach 10s hat der Maker kein Bock mehr.. mit einem Graphics.update zwischendrin könnte man zwar den Absturz verhindern, aber wer will schon >10s Wartezeiten im Spiel haben?^^)
Da diese Methode recht zeitaufwändig ist, könnte ich mir vorstellen, dass man sie nicht so ohne weiteres in Animationen einbauen kann.. ruckelt vllt ein wenig..
Eine Möglichkeit wäre es allerdings, diese veränderten Bitmaps bereits zu Spielbeginn zu erstellen, und temporär zu speichern.. so wären die Ladezeiten nur am Anfang ein Mal.. (Nachteil: sobald das Spiel beendet wird, sind sie wieder weg, Bitmaps können nicht gespeichert werden..)
Dies vllt als Anregung für Leute, die das Script auch für größere Bilder verwenden wollen.. im Script selber kann man daran nicht viel ändern, da man abgesehen von den Pixeln keinen großen Einfluss auf die Bitmaps nehmen kann..
Ich suche selber schon lange nach ner Möglichkeit, den Alphakanal zweiter Bitmaps ohne diese Pixelmethode zu wechseln.. spiele grad ein wenig mit API rum..
-f0tz!
wirklich ein sehr schönes script.. werde es mit sicherheit gebrauchen..
kannst dir ja mal das hier anschauen und evtl. weitere Anregungen sammeln (wenn du das nicht schon getan hast, spontan ist mir noch keine Funktion eingefallen, die in deinem Script noch fehlt.. ^^)
btw.. bei größeren Bildern kann es allerdings gar nicht funktionieren.. soweit ich das erkennen kann, ändert das Script jeden Pixel einzeln, was ab einer bestimmen Größe einfach zu lange dauert (deshalb ists bei Monsta auch abgestürzt.. nach 10s hat der Maker kein Bock mehr.. mit einem Graphics.update zwischendrin könnte man zwar den Absturz verhindern, aber wer will schon >10s Wartezeiten im Spiel haben?^^)
Da diese Methode recht zeitaufwändig ist, könnte ich mir vorstellen, dass man sie nicht so ohne weiteres in Animationen einbauen kann.. ruckelt vllt ein wenig..
Eine Möglichkeit wäre es allerdings, diese veränderten Bitmaps bereits zu Spielbeginn zu erstellen, und temporär zu speichern.. so wären die Ladezeiten nur am Anfang ein Mal.. (Nachteil: sobald das Spiel beendet wird, sind sie wieder weg, Bitmaps können nicht gespeichert werden..)
Dies vllt als Anregung für Leute, die das Script auch für größere Bilder verwenden wollen.. im Script selber kann man daran nicht viel ändern, da man abgesehen von den Pixeln keinen großen Einfluss auf die Bitmaps nehmen kann..
Ich suche selber schon lange nach ner Möglichkeit, den Alphakanal zweiter Bitmaps ohne diese Pixelmethode zu wechseln.. spiele grad ein wenig mit API rum..

-f0tz!
Ja, die Performance-Probleme sind wahrscheinlich unvermeidlich. Wenn möglich, habe Look-up-Tables (LUT) verwendet, das hat die Performance einiger Methoden sehr verbessert, aber das geht eben nicht immer. Wenn du Möglichkeiten siehst, irgendwo ein paar Frames Performance-Gewinn rauszuholen, sag Bescheid.
Das mit dem Cachen hab ich mir auch schon überlegt, allerdings dauert das dann am Anfang des Spieles so lange... Ich hab bei dem Versuch, eine einfache Animation abzuspielen, erst eine Methode aufgerufen, die die Einzelbilder der Animation als Bitmap-Array zurückgab, während der Berechnungen, die in einem parallelen Thread abliefen, den Spieler mit ein paar Message-Boxen bei Laune gehalten, um dann eine flüssige Animation abspielen zu können - es hat ganz gut funktioniert.
Falls es dich interessiert, ich habe folgende Methode zum Abspielen verwendet:
Und danke für den Link, da kann ich mir sicher ein paar Anregungen holen
Das mit dem Cachen hab ich mir auch schon überlegt, allerdings dauert das dann am Anfang des Spieles so lange... Ich hab bei dem Versuch, eine einfache Animation abzuspielen, erst eine Methode aufgerufen, die die Einzelbilder der Animation als Bitmap-Array zurückgab, während der Berechnungen, die in einem parallelen Thread abliefen, den Spieler mit ein paar Message-Boxen bei Laune gehalten, um dann eine flüssige Animation abspielen zu können - es hat ganz gut funktioniert.
Falls es dich interessiert, ich habe folgende Methode zum Abspielen verwendet:
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Animation
def Animation.play(frames, x, y, width, height, sleep=0.015)
thread = Thread.new {
sprite = Sprite.new
sprite.x = x
sprite.y = y
sprite.bitmap = Bitmap.new(width, height)
for frame in frames
sprite.bitmap.clear
sprite.bitmap.blt(0, 0, frame, Rect.new(0, 0, width, height))
sleep(0.015)
end
sprite.dispose
}
end
end |
Und danke für den Link, da kann ich mir sicher ein paar Anregungen holen
Wie lassen sich die Werte zweier Integervariablen vertauschen?
Machen Sie mit und gewinnen Sie Ruhm und Ehre! ?"Caesar"?
Die kürzeste Lösung gewinnt. Gibt es mehrere richtige Einsendungen, wird ein zufälliger Gewinner aus diesen gezogen.
zum Lesen den Text mit der Maus markieren
Die Aufgabe der letzten Runde lautete:
Es hat keiner teilgenommen, daher gibt es keinen Gewinner ^^ Eine mögliche Lösung wäre gewesen:
Zitat
Schreiben Sie einen Parser für die ASCII-Form des Dateiformats PBM (Portable Bitmap). Die Methode soll als Parameter einen Dateinamen erhalten und eine Bitmap zurückgeben. 0 ist weiß, 1 ist schwarz. Eine Beispieldatei, die den Buchstaben 'A' darstellti:
![]()
Quellcode
1 2 3 4 5 6 7 8 9 10 11 P1 9 9 000010000 000010000 000101000 000101000 001000100 001111100 001000100 010000010 111000111
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def parse_pbm(filename)
f = File.open(filename)
return nil unless f.readline.chomp == "P1"
width, height = f.readline.split(' ').collect {|i| i.to_i}
bitmap = Bitmap.new(width, height)
c0 = Color.new(255, 255, 255)
c1 = Color.new(0, 0, 0)
for iy in 0...height
f.readline.chomp.split('').each_with_index do |v, k|
bitmap.set_pixel(k, iy, v == '0' ? c0 : c1)
end
end
return bitmap
end |
zum Lesen den Text mit der Maus markieren
...wie man zum Testen schnell einzelne Scripts "ausbaut", ohne das Script aus dem Scripeditor zu löschen?
Ganz einfach: Man fügt im Scripteditor ganz oben im Script die folgende Zeile ein:
und ganz unten als letzte Zeile:
Das hat den gleichen Effekt, wie wenn man das ganze Script aus dem Scripteditor gelöscht hätte.
|
|
Quellcode |
1 |
if false |
|
|
Quellcode |
1 |
end |
zum Lesen den Text mit der Maus markieren
Ich will ja hier nicht rummeckern, aber im deutschen gibt es kein "Caesar's" :p
So aber weswegen ich den Theard schreibe, gibt es eine !einfache! Möglichkeit errechnete Grafiken irgendwo zu speichern und beim nächsten Aufruf aus dem Cache zu laden? (Habe zwar eine gefunden, ist aber ein bissel kompliziert)
und gibt es einen Alghorthymus (schreibt man das so?) Bitmaps zu drehen? (nicht Sprites, das geht ja schon), das Hauptproblem ist nämlich das die Tilemap Class nur Bitmaps akzeptiert :/
Danke fürs Lesen Abt
Zitat von »"Fallstricke auf der Homepage"«
Über 100.000 deutsche Webseiten sind falsch betitelt. Immer wieder heißt es "Tanja's Homepage" oder "Holger's Webseite" und noch bei miehr Anbietern gibt's "Info's". Eine Kleinigkeit ie störend wird.
Weder beim Genetiv noch bein Pluralbenutz man im Deutschen ein Apostroph-S. Lediglich als Auslassungszeichen nach dem Namen, wie bei "Lars' Homepage" ist es erlaubt. Setzen sie auch keine Abkürzungen in den Plural, wemm der ausgeschriebene Ausruck sowieso in der Mehrzahl steht.
So aber weswegen ich den Theard schreibe, gibt es eine !einfache! Möglichkeit errechnete Grafiken irgendwo zu speichern und beim nächsten Aufruf aus dem Cache zu laden? (Habe zwar eine gefunden, ist aber ein bissel kompliziert)
und gibt es einen Alghorthymus (schreibt man das so?) Bitmaps zu drehen? (nicht Sprites, das geht ja schon), das Hauptproblem ist nämlich das die Tilemap Class nur Bitmaps akzeptiert :/
Danke fürs Lesen Abt
einen Algorythmus zum drehen?
sollte ja wohl nicht so schwer sein..
(auch wenns nur Pixelweise ist ^^)
bitmap.drehen(grad) gibt das (die?) gedrehte bitmap zurück (180°,90° und -90° möglich)
kann bei bedarf ja noch hier in das projekt eingebunden werden.. ^^
kannst du die bitmaps nicht einfach in einer variable speichern? (zB könntest du n Array zu Beginn erstellen oder sowas..)
oder willst du sie so speichern, dass sie nach Spielneustart auch noch vorhanden sind? (dann ginge o.g. nicht!) -> wenn du dafür schon ne möglichkeit gefunden hast (egal wie kompliziert), wärs nett, wenn du die mal posten könntest..
btw.. "Caesar's tongue" oder "Tanja's Homepage" find ich gar net falsch.. homepage und tongue sind beides englische Wörter, also sollte man auch den Namen nach der englischen und nicht nach der deutschen Grammatik behandeln.. (dann würds stimmen
)
-f0tz!
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
class Bitmap
def drehen(grad = 180)
if grad == 180
new_bit = Bitmap.new(self.width,self.height)
for i in 0..self.width
for j in 0..self.height
new_bit.set_pixel(self.width-i,self.height-j,self.get_pixel(i,j))
end
end
return new_bit
elsif grad == 90
new_bit = Bitmap.new(self.height,self.width)
for i in 0..self.width
for j in 0..self.height
new_bit.set_pixel(self.height-j,i,self.get_pixel(i,j))
end
end
return new_bit
elsif grad == -90
new_bit = Bitmap.new(self.height,self.width)
for i in 0..self.width
for j in 0..self.height
new_bit.set_pixel(j,self.width-i,self.get_pixel(i,j))
end
end
return new_bit
end
end
end |
sollte ja wohl nicht so schwer sein..

(auch wenns nur Pixelweise ist ^^)
bitmap.drehen(grad) gibt das (die?) gedrehte bitmap zurück (180°,90° und -90° möglich)
kann bei bedarf ja noch hier in das projekt eingebunden werden.. ^^
kannst du die bitmaps nicht einfach in einer variable speichern? (zB könntest du n Array zu Beginn erstellen oder sowas..)
oder willst du sie so speichern, dass sie nach Spielneustart auch noch vorhanden sind? (dann ginge o.g. nicht!) -> wenn du dafür schon ne möglichkeit gefunden hast (egal wie kompliziert), wärs nett, wenn du die mal posten könntest..

btw.. "Caesar's tongue" oder "Tanja's Homepage" find ich gar net falsch.. homepage und tongue sind beides englische Wörter, also sollte man auch den Namen nach der englischen und nicht nach der deutschen Grammatik behandeln.. (dann würds stimmen
)-f0tz!

, Color.green(12
YAams
Random Signatur