Einfach einen weiteren Sprite darüber setzen. Content im Window ist auch nichts anderes als ein separater Sprite.
Einfach einen weiteren Sprite darüber setzen. Content im Window ist auch nichts anderes als ein separater Sprite.
Content ist ein Bitmap-Objekt. Du könntest eine weitere Window-Klasse machen, die z.B. von Window_Base erbt und darin ein zweites Bitmap-Objekt (content2 oder wie auch immer) instanzieren:
Geändert von stardust (24.01.2012 um 15:26 Uhr)
Ich hab was ähnliches gemacht, ich weiss allerdings nicht genau, ob sich das auch auf Scrollbare Windows anwenden lässt, wobei es Window_Command mit ner Headline ist und daher eh eine Subklasse von Selectable.
Ich persönlich hab mir ne zweite Klasse erstellt, also in meinem Fall Window_Command_Headline, Klasse redefinieren oder von ihr Ableiten dürfte aber mit leicht anderer Herangehensweise auch funktionieren.
In Window_Command findest du übrigens auch eine Standard-Contents-Erstellungsanweisung afaik, kannst dich daran ja Orientieren und das passend Semantisch auf Fenstergröße umstellen.
Der Trick ist jetzt, einfach alle an relevanten Operationen die Koordinaten zu modifizieren - in den meissten Fällen wird das also y+Interger(Headgröße) sein - bzw +AnzahlAnZeilenVomHeader - je nachdem was passiert
Ich weiß nicht 100%ig ob das ein Ansatz ist, der auch für Selectable funktioniert, aber für Command hat die herangehensweise wunderbar funktioniert.
Das würde so nicht funktionieren. Ein Bitmap kann man nicht sehen auf dem Bildschirm. Ein Bitmap enthält nur Daten.
Was man braucht um eine Grafik anzuzeigen ist ein Sprite. Einen sprite setzt man in einen Viewport, in diesem Fall den gleichen wie das Fenster, und übergibt dem Sprite ein Bitmap welches er darstellen soll.
Wie ich oben bereits geschrieben habe, erstelle einen Sprite und lege diesen an die richtige Stelle. Die Window Contents sind ebenfalls nichts anderes.
Mmhm danke für die Antworten, wird wohl auf ne zusätzliche Klasse / Sprite hinauslaufen - Ich hätts halt am saubersten (und wohl auch für andere Vorhaben potentiell hilfreich) gefunden,wenn ich irgendwie den sprite vom content-Bitmap modifizieren könnte und nicht nur das Bitmap selbst,
Wenn du etwas scrollen willst dann musst du ganze Sprites scrollen. Anders würde es auch garkeinen Sinn machen.
Jedes separates Element sollte sowieso ein eigener Sprite sein sofern du größere Möglichkeiten offen halten willst.
@Cornix Nicht ganz richtig, contents ist zumindest in den Windowklassen der Standardskripts ein Bitmap-Objekt, kein Sprite-Objekt. Für die Anzeige von reinem Text genügt eine Bitmap, alle anderen Window-Klassen kommen auch damit aus, sieh nach![]()
Geändert von stardust (25.01.2012 um 12:39 Uhr)
Das Objekt ".contents" ist zwar ein Bitmap, ein Bitmap kann aber ohne sprite nicht dargestellt werden.
Der Sprite ist in dieser Hinsicht das Window selbst dessen Bitmap nunmal das ".contents" Objekt ist.
Du kannst mir gerne ein Script schreiben mit welchem du ein Bitmap ohne einen Sprite darstellst um mich von dem Gegenteil zu überzeugen.
Hab ich auch nie behauptet, aber er hat ja bereits eine Windowsklasse. Und dass er sich darin um die Anzeige, das Aktualisieren, usw. des Textes kümmern muss sollte klar sein.
@stardust: ein "contents2"-Bitmap würde allerdings nicht helfen, da nur contents vom Window in einen Sprite gepackt wird. Das ist der Punkt.
Hallo, mal wieder eine Frage von mir
Mich plagt eigentlich schon die ganze Zeit das Laden von Musik im RPGXP. Bei der Suche hab ich nichts dazu gefunden, daher scheint es kein generelles Problem zu sein. Die Sache ist jedenfalls:
Wenn das erste Mal eine BGM oder ME abgespielt werden soll, hängt das Spiel für 5 Sekunden. Die Musik wird noch nicht abgespielt, aber auch alles an Grafik friert ein. Erstes Mal heißt dabei jedes Mal, wenn das Spiel geöffnet wird. So dauert es 5 Sekunden, bis der Titelbildschirm angezeigt wird. Wenn ich die BGM für den Titel abstelle, häng tes stattdessen bei der ersten Map mit BGM usw. Mit den MEs genau das Gleiche.
Die Ladezeit gibt es immer nur beim ersten Mal, wenn z.B. beim Titel BGM1 gespielt wird und bei der ersten Map BGM2 lädt es nur beim Titelbildschirm und alle weiteren BGMs werden sofort abgespielt. Es ist dabei anscheinend egal, was für eine BGM beim ersten Mal gespielt wird, importiert oder aus der RTP, kleine oder große Datei, kein Unterschied. Das Problem tritt auch in jedem Projekt auf, auch in einem neu gestarteten Projekt ohne Inhalt / Imports.
Ist das Problem bekannt und gibt es Lösungen um die Ladezeit wegzukriegen? Beim Testen ist es doch ziemlich nervig wenn man jedes Mal, auch wenn man Kleinigkeiten testet, erstmal die Verzögerung abzuwarten.
Geändert von Fatalis (09.04.2012 um 12:04 Uhr)
Ich habe zwar noch nie etwas dergleichen gemerkt aber ich würde sagen das klingt stark danach, dass einfach die Bibliotheken und Scripte zum Abspielen von Musik geladen und initialisiert werden müssen.
Das kannst du nicht umgehen.
Das selbe Problem habe ich auch. Zumindest bei mir tritt das Problem aber nur bei MIDI-Dateien auf. Ist übrigens auch im Editor so. Wenn ich dort das erste Mal eine MIDI-Datei abspielen will, hängt das ganze kurz. In Winamp/Mediaplayer/etc habe ich dieses Problem aber nicht, dürfte also ein Problem der Engine sein, und keines von meinem PC.
--
Das Problem scheint eines vom RPG Maker selbst zu sein, und zwar in jeweils Kombination von bestimmten Dingen. Dabei können sowohl Projekte als auch der diverse Soft- und Hardwaregründe sein.
Ich hab die Erfahrung gemacht, dass ich bei den meissten MEINER Projekte Probleme hab, mit extrernen aber nur bei manchen, während Freunde von mir bei meinem Projekt wo es bei mir hakt keine Probleme haben.
Ich habe eine behelfsmässige Lösung für das Problem gefunden, die alle Lieder mit einem Schlag einlädt und danach nicht mehr Laden muss. D.h. auf betroffenen PCs würde einmal dieser Hänger 5 Sekunden bei jedem Spielstart auftreten, danach nicht wieder bis zum Neustart der exe.
(Zum Testen von Scripten empfehle ich allerdings eher, entsprechende BGMs einfach auszumachen, und auch das Script rauszukommentieren, wenn man das Spiel häufig startet) (oder ihr fragt drumherum ein unless $DEBUG ab). Eigentlich würd ich gern halb-Credit dafür wem geben, da ich darauf über ein Script (Scene_MusicPlayer), welches ich im rpg-studio gefunden hab drauf gekommen bin und die Lösung nur copy/paste/edited hab, leider ist kein Name im Script selbst und der Link den ich mir dazu aufgeschrieben hab ist tot.
Dies wäre in Scene_Title, direkt unter der if $BTEST abfrage, also direkt über dem Laden der Daten dann, wenn ihrs mögt.
Das führt zwar zu einer knapp längeren Ladezeit im Title, dafür danach nicht mehr. Gut fürs Release (Leute die die Hänger nicht haben merkens garnicht, Leute die es haben, merken es wesentlich seltener, was angenehmer sein sollte) oder das Testen bestimmter Szenen.
Das Problem ist, dass es sowieso nur beim jeweils ersten Laden eines BGM oder BGS auftritt. Danach hängt es nie wieder.
--
Ach? Okay, ich hab die Variante, dass beim ersten Laden JEDES Files das Problem auftritt, deshalb hatte ich es so interpretiert. File einmal geladen, gut, aber es hängt für Title BGM, Battle BGM, Map BGMs, BattleEnd-BGS - Vorausgesetzt, diese unterscheiden sich natürlich. Alles nur einmal. Für ebd. hilft die Lösung. Nur einmal hängen am Start find ich persönlich halb so wild ehlich gesagt.
Lang lang ists her, ich hab mich mal wieder an den Maker gesetzt und ein kleines Problem..
Ich nehme an, das Problem ist ein ziemliches Standard-Problem beim XP, eine Suche hat mir aber keine praktikable Lösungen geliefert.
Es geht einfach darum, dass Events als "Brücke" über unbegehbarem Grund dienen sollen. Im 2000 war das ja problemlos möglich, Event hinsetzen, below hero, fertig.
Im XP geht das anscheinend nicht, solange man für das Event keine Tilset-Grafik benutzt. Wenn die Brücke animiert sein soll, ist das schon ein Problem. Ich denke eigentlich, dass das Problem recht einfach durch eine Änderung im Game_Player- oder Game_Map-Skript behoben werden könnte. Vielleicht hatte ja jemand schonmal das gleiche Problem und kann mir weiterhelfen.
(Ich weiß, man könnte zB im Mapping schon unsichtbare, begehbare Tiles setzen und die Events auf through setzen und es gibt auch kompliziertere Lösungen. Das wäre für mich keine Lösung, ich brauch das möglichst flexibel, sodass das Feld nur durch das Event begehbar wird. Konkret gesagt kann man Baumstämme ins Wasser schieben und diese als Brücke benutzen, ähnlich wie in Golden Sun)
Im 2k geht das auch nur wenn die Grafik aus dem Tileset stammt.
Aber hier mal eine Lösung für den XP (kann man mit Sicherheit noch schöner schreiben)
In ein neues Script über Main einfügen. Events die auf Trough gesetzt sind und "bridge" im Namen haben sind dann immer passierbar egal was für Tiles unter oder über ihnen sind.
--"Banjo, you're a BEAR... and I will teach you... THESE MOVES!"
Nur als kleiner Hinweis am Rande, die dargestellte Lösung ist nicht sonderlich "effizient" was die Performance angeht. Es wird wahrscheinlich nicht direkt zu Problemen führen, kann aber wahrscheinlich, wenn man sich die Mühe machen wollte, sehr viel effektiver gelöst werden.