PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RMXP/Ruby-Fragen (WICHTIG!!!!)



Lil_Lucy
12.03.2006, 20:52
Nachdem mein letzter Thread hier komplett ignoriert wurde hab ich meine Ambitionen etwas zurückgeschraubt. Ein paar Fragen bleiben trotzdem.

1. Wie schaffe ich es dass ein Common-Event auf Parallel-Process das über einen Conditional Branch (ESC muß gedrückt werden) eine Auswahlbox anzeigen soll (oder irgendein anderes Ereignis auslösen soll) nur dann aktiv ist wenn auch das Menü aufgerufen werden könnte (d.h. nicht während irgendwelche Events laufen oder Gespräche geführt werden, wohl aber während parallele Prozesse laufen)? Und zwar auch dann wenn ich das Hauptmenü deaktiviere (disable)!

2. Wie kann ich zusätzliche Bilder über Ruby anzeigen lassen (also zusätzlich zu den 50 normalen), wie lösche ich sie wieder und was ist zu beachten?

3. Große OGG-Dateien verursachen immer einen unschönen Lag wenn sie eingeladen werden. Kann man es irgendwie hinkriegen das die Teile im Hintergrund geladen werden ohne gleich das ganze Spiel anzuhalten?

4. Das Anzeigen von Variablen mit \v[nummer] funktioniert meines Wissens nach nicht in Show Choice Optionen. Kann man das ändern? Im AMS isses nicht drin.

Ich schätze mal für die ganzen Sachen wird man Ruby brauchen, aber Klickscriptlösungen wären auch willkommen!

Wäre lieb wenn ihr mir diesmal helfen könntet!

Kelven
12.03.2006, 21:17
Vor weg gesagt, ich kenne mich mit Ruby nicht aus, daher kann ich leider nur sehr oberflächlich was dazu sagen.

1. Das könnte man ( falls ich dich nicht missverstanden habe ) eigentlich mit einem Blockierswitch machen, der vor jedem Event ausgeschaltet und danach wieder angeschaltet wird. Das ist aber natürlich die aufwändigste Lösung.

2. Über die Spriteklasse müsste man eigentlich auch Pictures direkt anzeigen können, aber das Problem ist, dass die nach ein paar Frames wieder gelöscht werden. Da müsste man sich gut mit dem Code auskennen um einen Weg zu finden, die permanent anzuzeigen.

3. Leider keine Ahnung.

4. Hier könnte man vielleicht an der Stelle im Script, an der der String für die Textausgabe im Optionsfenster zusammengesetzt wird, diese Abfrage manuell einbauen. Leider weiß ich nicht wo das passiert.

Der Drake
12.03.2006, 21:24
1. Wie schaffe ich es dass ein Common-Event auf Parallel-Process das über einen Conditional Branch (ESC muß gedrückt werden) eine Auswahlbox anzeigen soll (oder irgendein anderes Ereignis auslösen soll) nur dann aktiv ist wenn auch das Menü aufgerufen werden könnte (d.h. nicht während irgendwelche Events laufen oder Gespräche geführt werden, wohl aber während parallele Prozesse laufen)? Und zwar auch dann wenn ich das Hauptmenü deaktiviere (disable)!
Mach eine Fork Condition mit diesem Skript um die Abfrage nach der B Taste herum:

not $game_system.map_interpreter.running?


2. Wie kann ich zusätzliche Bilder über Ruby anzeigen lassen (also zusätzlich zu den 50 normalen), wie lösche ich sie wieder und was ist zu beachten?
Richtige Pictures mit allem drum und dran sind schwierig, du könntest Sprites in globale Variablen packen, aber das ist eine wenig elegante Lösung.


3. Große OGG-Dateien verursachen immer einen unschönen Lag wenn sie eingeladen werden. Kann man es irgendwie hinkriegen das die Teile im Hintergrund geladen werden ohne gleich das ganze Spiel anzuhalten?
Das Standardsoundsystem des XPs kann .ogg Dateien nicht streamen (sprich "im Hintergrund laden"), deshalb hast du im Grunde genommen zwei Möglichkeiten: oggs in mp3s umwandeln, oder ein neues Soundsystem anschaffen. Für letzteres brauchst du allerdings Ruby Kenntnisse...


4. Das Anzeigen von Variablen mit \v[nummer] funktioniert meines Wissens nach nicht in Show Choice Optionen. Kann man das ändern? Im AMS isses nicht drin.
Eigentlich sollte es funktionieren... es ist seltsam, wenn es das bei dir nicht tut... oo


2. Über die Spriteklasse müsste man eigentlich auch Pictures direkt anzeigen können, aber das Problem ist, dass die nach ein paar Frames wieder gelöscht werden. Da müsste man sich gut mit dem Code auskennen um einen Weg zu finden, die permanent anzuzeigen.
Sie verschwinden weil Ruby die Variablen die du da anlegst wieder löscht (garbage collection). Du könntest es in globale Variablen packen, oder Klassen erstellen die von Game_Map oder dergleichen aus gehandhabt werden und dir die Arbeit abnehmen. (letzteres wäre eine elegentere Lösung... eine bei weitem elegantere Lösung...)
Sprites in globale Variablen erstellst du übrigens wie folgt: $variablenname = Sprite.new
Der Nachteil ist allerdings, dass du diesen Sprite dann auch selbst löschen musst. Und es ist kein guter Stil.

MagicMagor
13.03.2006, 13:09
Zu der Sache mit den Pictures:

1. Ich habe mal im Rmxp-FaQ hier ein kleines Tut geschrieben die maximale Zahl von 50 Pictures zu erhöhen, wobei das rumschreiben in vorhanden Klassen fehleranfällig ist und mMn die Speerspitze von uneleganz darstellt.
2. Das eleganteste wäre, wie gesagt, alles von einem Modul verwalten zu lassen, wobei ich hier von Game_Map abrate (Pictures haben IMO mit der Map nix zu tun).
Hier ein kleiner Vorschlag meinerseits:


module Pictures

@sprites = Hash.new()

def Pictures.showPicture(key, name, x, y, z)
@sprites[key] = Sprite.new
@sprites[key].bitmap = RPG::Cache.picture(name)
@sprites[key].x = x
@sprites[key].y = y
@sprites[key].z = z
end

def Pictures.deletePicture(key)
if !@sprites[key].nil?
@sprites[key].bitmap.dispose
@sprites[key] = nil
end
end

def [](key)
return @sprites[key]
end
end


showPicture und deletePicture sollte selbst erklärend sein. "key" ist hier nur ein eindeutiger Bezeichner für das Picture, wie zB die ID bei den normalen Pictures. Es muss aber nicht zwangsläufig eine Zahl sein.
Mittels "Pictures[key]" kannst du auf einzelne Pictures zugreifen und so zB ihre x- oder y-koordinaten verändern, wenn das Bild bewegen willst.

Der z-Wert entscheidet darüber was über was liegt. Je höher der Wert umso näher am Betrachter. Ich habe jetzt allerdings nicht im Kopf welchen z-Wert die Map hat. Fang am besten bei 100 oder so an, da sollte dann nix schiefgehen.

Zu beachten gibt es eigentlich nicht viel. Davon abgesehen, daß man das Bitmap disposen (löschen) muss ist die Sprite-Klasse eigentlich recht einfach zu bedienen. Was vielleicht noch zu erwähnen ist, daß das Bewegen der Pictures nun nicht mehr automatisch erfolgt. Sprich bei Änderung der Koordinaten springt das Bild sofort zur neuen Position. Ich war jetzt zu faul eine Methode zu schreiben, die die Koordinaten langsam angleicht.

Der Drake
13.03.2006, 14:04
Zu beachten gibt es eigentlich nicht viel. Davon abgesehen, daß man das Bitmap disposen (löschen) muss ist die Sprite-Klasse eigentlich recht einfach zu bedienen.
Abgesehen davon finde ich deinen Code nicht schlecht, aber an dieser Stelle:
Bitmaps die du in den Cache lädst solltest du NICHT löschen sobald du damit fertig bist (das macht den ganzen Sinn des Caches kaputt), stattdessen solltest du das Sprite Objekt selbst löschen. (ansonsten wird der Sprite noch x frames weiterbearbeitet, obwohl es ihn eigentlich schon nicht mehr gibt.)
Mit anderen Worten: änder "@sprites[key].bitmap.dispose" zu "@sprites[key].dispose"

Dann sind übrigens flüssige Animationen von einem map Event aus nicht möglich, da der wait Befehl immer doppelt so lange wartet wie du angibst (ist eigentlich hirnrissig, und macht wie gesagt wirklich flüssige Animationen unmöglich...)
Deshalb muss man es eigentlich in eine der Standardklassen einbinden, wenn es wirklich irgendwas bringen soll, mMn. (Klar ist das vom Stil her nicht so toll, aber k...)

Lil_Lucy
17.03.2006, 18:33
Yo, danke an euch alle! Ich war die Woche über nicht da, werd's nachher mal genauer ansehen.

Das mit den Pictures ist im Moment nicht mehr so wichtig, ich glaube ich werd mit den verfügbaren Standardpics widererwarten doch hinkommen.

Das mit dem Menüaufruf muß ich ausprobieren. Hoffentlich funktioniert es, sieht eigentlich ganz plausibel aus!

Das ich die OGGs nicht streamen kann kotzt mich natürlich echt an, denn MP3s werden bei mir im Maker nicht richtig abgespielt, k.A. wieso, der MP3-Patch für'n 2k geht auch nicht. Wenn dafür nochjemand eine Lösung hätte wäre ich sehr dankbar!

Aber naja, ihr habt mir schon geholfen, danke!

Ascare
17.03.2006, 23:51
Das ich die OGGs nicht streamen kann kotzt mich natürlich echt an, denn MP3s werden bei mir im Maker nicht richtig abgespielt, k.A. wieso, der MP3-Patch für'n 2k geht auch nicht. Wenn dafür nochjemand eine Lösung hätte wäre ich sehr dankbar!


Der Maker XP unterstützt auch noch das wma Format, welches sich streamen lässt. Probier mal folgendes:
1. Öffne Windows Movie Maker und importiere eine mp3 (Audio importieren links im Menü - wenn du es nicht siehst -> Ansicht im Menü -> Aufgabenbereich anklicken)
2. Ziehe die importierte in die Zeitleiste unten (ganz nach links ziehen)
3. Geh unter Punkt 3 "Auf Computer speichern" und wähle später unter den weiteren Einstellungen z.B. Audio, 128 kbits aus.
4. Speichern, im Maker importieren, anhören. Wma sollte auch ähnlich klein wie mp3 sein.

Die Methode zu encodieren ist zwar kostenlos, aber man kann nur eine Datei auf einmal abspeichern. Vielleicht gibt's auch bessere Programme, kenne mich da nicht so aus - musst mal schauen. ;)

Lil_Lucy
09.04.2006, 19:41
@Ascare: Yo, hat 'ne Weile gedauert bis ich ein entsprechendes Konvertierungstool nebst WMA-Encoder gefunden habe, aber jetzt funktioniert alles wie ich es mir gewünscht habe.

Danke für den Tipp, die WMAs hatte ich schon vollkommen vergessen...

Ascare
10.04.2006, 22:28
GG.
Welches tool hast du jetzt eigentlich genommen? Ich hab ein Prog. namens GX Transcoder gefunden, aber ich würde auch gerne noch eine andere (kostenlose) Alternative haben wollen. Möchte teilweise auch auf WMAs umsteigen.

Lil_Lucy
11.04.2006, 13:40
Ui, moment, wie hies das jetzt...?

Der Shortcut nennt sich 'dBpowerAMP Music Converter' , ich hab das auf der XL-DVD der aktuellen Gamestar gefunden, den Codec musste ich extra runterladen, den passenden Link nannte mir die Software.

Ascare
11.04.2006, 18:46
Ok, thx. Hab es gefunden.