Beim 2K benutze ich dieses System schon seit Zwielicht und dort läuft alles wie geschmiert.
Mich würde mal interessieren, wie das Wait-Kommando intern in Ruby ausgeführt wird, vor allem im Hinblick darauf, wie man das da simuliert. Reicht da ein sleep?
Im Interpreter steht bei Wait ja folgendes:
Vielleicht bin ich zu doof das zu finden, aber ich sehe nirgendwo dieses wait_count als Variable.
In der Interpreter#update Methode wird pro frame eine Schleife ausgeführt die zuerst einmal prüft ob das Event auf irgendetwas wartet, falls nicht wird das nächste Kommando ausgeführt und anschließend geschaut ob das Event dabei abgebrochen wurde.
Die Schleife wird dann so lange wiederholt bis irgendeine dieser Warte/Abbruch Bedinung erfüllt wurde.
Der Code der sich mit dem Wait befasst sieht so aus:
Und findet sich ab Zeile 167. Auch gut zu wissen ist, dass die Wartezeiten die du im Editor eingibst eigentlich *2 genommen werden, wenn du Wartezeiten dierekt in ruby implementierst musst du berücksichtigen, dass ein Frame in Wirklichkeit 1/40 Sekunde entspricht und nicht 1/20 wie im Editor.
Wartezeiten an für sich lassen sich einfach einbauen, die Methode Graphics.update welche man jeden Frame aufrufen sollte wartet nämlich gleichzeitig auf den nächsten Frame.
Sleep ist dabei keine gute Lösung, immerhin hälst du damit das gesamte geschehen an, was in einem Spiel sicherlich nicht gut kommt.
--Plots in a Nutshell:
Someone the reader likes overcomes increasingly difficult obstacles to reach an important goal. ~ Author unknown
Jetzt hast du aber nur nicht ganz genau gesagt, wie man ein Wait einbauen kann. Soll man dann einfach Graphics.Update aufrufen?
Du sollst eine Methode einbauen die einmal pro frame aufgerufen wird und die einen Zähler hat, welcher wie im Interpreter aufgebaut ist. Sofern der Zähler noch läuft gibt's ein return und vom Zähler wird 1 abgezogen, falls nicht geht es weiter mit dem geschehen.
--Plots in a Nutshell:
Someone the reader likes overcomes increasingly difficult obstacles to reach an important goal. ~ Author unknown
Ne kleine Frage am Rande, gibt es eine Möglichkeit, einen Wait-Befehl zu erstellen, notfalls mit RGSS, der weniger als ein Frame dauert? Weil Animationen mit einem Wait von einem Frame sehen übelst aus. Ich wollte wissen, ob das vielleicht flüssiger geht. Vielen Dank.
Wenn du im Interpreter einen Frame wartest, wartet er intern gleich zwei davon - warum auch immer. Die einfachste Möglichkeit eine richtige Frame Wartezeit einzufügen ist wohl über call script:
würde 3 frames warten
--Plots in a Nutshell:
Someone the reader likes overcomes increasingly difficult obstacles to reach an important goal. ~ Author unknown
Tileset für XP: 256 * beliebig Pixel, durcheinander einfügen erlaubt.
RGSS: Ruby Game Scripting Sytsem (wenn mich nicht alles täuscht).
Theoretisch könnte man dann einfach ALLES oder jedenfalls ziemlich viele Sachen in ein einziges Tile reinpacken oder?
Bis auf die Tatsache dass dann vllcht dieses einzige Tile etwas zu viel KB hätte oder irr ich mich hier?
Könntest du theoretisch machen, ist aber nicht unbedingt sinnvoll.
Denn in der Regel braucht man nicht immer alles. (wozu zB. ein Klavier in einem Wald)
Ich hab sogar mal ein Spiel gespielt, wo alles in einem Chipset war, das brauchte dann aber im Maker auch immer etwas bis es geladen war.
THX für die Hilfe aber noch was....
Kann ich denn auch das Autotile-Limit für ein Tile in der Database erhöhen?
EDIT: sry für die Frage mit dem Chipset!" Habs grade auf Seite 1 gelesen X.X
Geändert von Housemaster (06.06.2006 um 17:22 Uhr)
Nein, pro Tileset sind wohl nur 7 Autotiles möglich. Aber du kannst ja das Tileset mehrfach kopieren in der Database und einfach die zugewiesenen Autotiles ändern.
Ich hab jetzt auch mal eine kleine Frage zum RMXP.
Da ich mir den Maker vor wenigen Tagen ebenfalls zu gelegt habe, und mich auch schon mit Ruby usw. beschäftigt habe, stellt sich bei mir nun die Frage, wie ich es schaffe, ein Intro, basierend auf Maps, vor dem eigentlichen Titelscreen zu zeigen.
Ich habe auch schon diverse Foren und Themen durchsucht, aber nichts gefunden, dass mir weiterhelfen kann.
Hat irgendjemand ein Script oder wenigstens eine Idee wie ich so etwas umsetzen könnte.
Vielen Dank im Vorraus.
LG Henry
Oh? Ich dachte immer, Threads würden das ganze noch langsamer machen... Ruby benutzt - aus Portabilitätsgründen - Green Threads, das heißt sie werden nicht über den Betriebssystem Kernel geregelt sondern sind dierekt im Programm implementiert -> Ruby Threads können nichts mit Super/Hyper Threading oder gar Dual Core Systemen anfangen. Und afaik waren das die einzigen Situationen in denen man durch Threads noch was gut machen kann...Zitat
Wo genau hast du mit Ruby's Threads also Performance gewonnen? Ich hab noch nicht viel mit gemacht oder dergleichen, kann also auch nicht wirklich was dazu sagen... nur rein von der Logik her würde es mich wundern. Oô
Ansonsten aber ja, Threads an sich sind schwer im kommen, bei kommerziellen Spielen (was die Sache aber höchstens noch komplizierter macht als es eh schon ist *g*)
--Plots in a Nutshell:
Someone the reader likes overcomes increasingly difficult obstacles to reach an important goal. ~ Author unknown
du hast teilweiße recht, ruby verwendet (leider) ruby-threads die wegen portabilitätsgründen nur innerhalb des ruby-interpreters laufen ... aber verlangsamen tun sie auf keinen fall, denn das würde sie völlig nutzlos machen.
durch die wegnahme einer berechnung durch einen thread wird das hauptprogramm entlastet, würd aber einfach mal empfehlen das ganze auszuprobieren, was schneller ist ... arbeite zwar beruflich schon seit etwa 3 jahren mit threads und co, aber ruby programmierung mach ich erst seit letzten freitag (endlich mit meinem cbs angefangen xD)
da verwende ich threads hauptsächlich für gleichzeitige berechnungen und das ist auf jedenfall deutlich performanter als wenn ich alles in der hauptroutine laufen lass^^
threads sind nicht im kommen, die sind schon lange da xD könnte mir ein arbeiten ohne die kleinen gar nicht mehr vorstellen^^ und so schwer sind die wirklich nicht handzuhaben ... thread=Thread.new{blablabla} und fertig ... (natürlich muss man halt auch bissl drauf achten, dass man sich damit nicht selbst ins nirvana schießt xD