@Morden: Hab bereits etwas reineditiert. Pixel sind da wirklich unnötig kompliziert, da war ich irgendwie betriebsblind als ich Codestücke aus meinem Plugin kopiert hab.
Zitat
Außer der ScreenTransition - ich glaube das ist das Einzige, was über allem steht.
Tatsächlich? Ich muss gestehen, dass ich mich weniger mit DynRPG+StandardKS beschäftigt habe >.<
Da würde mich jetzt glatt interessieren, ob die Standard-MessageBox auch über allem ist. Das werde ich heute Abend wohl mal ausprobieren^^
EDIT: Ich hätte auch mal weiter denken können: Brauch doch denn einfach nur checken, ob onDrawSystemBackground() nach onFrame() ausgeführt wird >.< Dann könnte man in solch einem Fall nämlich einfach dort auf den Bildschirm zeichnen.
PeAcE
MorDen
--
»Ein Traum kann auch die Wehmut nach der verlorenen Vergangenheit sein…«
»Manchmal ist eine Enttäuschung auch einfach nur das Ergebnis zu hoher Erwartungen.«
__________________________________________________________________________
Was? Über dem was du in onFrame gezeichnet hast? Das dürfte eigentlich nicht sein. Ich muss da mal nachforschen.
Eigentlich sollten wirklich nur Screentransitions (und Movies, iirc - und eventuell "Frames" von System2 aber ich weiß grade nicht ob das stimmt) den Bildschirm nach onFrame manipulieren können. Alle Kampfgrafiken sollten von der draw-Methode von TLcfgBattleScene gezeichnet werden, und onFrame wird immer nach der draw-Methode der aktuellen Scene aufgerufen...
"Über allem" kann man mit onDrawScreen zeichnen, aber das wird aufgerufen wenn aus Windows-Sicht der Fensterinhalt neu gezeichnet wird und das kann manchmal mehrmals beim selben Frame passieren, also sollte man beachten dass eventuell Sachen die man im vorigen onDrawScreen gezeichnet hat noch immer da sind.
Zitat von Morden
EDIT: Ich hätte auch mal weiter denken können: Brauch doch denn einfach nur checken, ob onDrawSystemBackground() nach onFrame() ausgeführt wird >.< Dann könnte man in solch einem Fall nämlich einfach dort auf den Bildschirm zeichnen.]
...
Für die Messagebox? Eher nicht, denn onDrawSystemBackground bezieht sich nicht auf den Fensterhintergrund sondern auf den Menühintergrund (der normalerweise einfärbig ist). Das Callback ist dazu da, eigene Hintergründe zu zeichnen. Fenster erscheinen über dem Hintergrund, und auf der Map wird das sowieso nicht verwendet weil ja die Map da ist und kein Systemhintergrund.
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!
Wie kriege ich es denn mit DynRPG hin, ein Bild anzuzeigen?
Ich geh mal stark davon aus, dass das hiermit geht:
Aber wie genau funktioniert das? ._.
Bzw. der Teil mit dem Image...Ich hab mir jetzt ein Bild gemacht, welches ich dann einfach drüber legen würde. Aber wie sage ich dem Programm, dass es dieses Bild benutzen soll?
Ich krieg das nicht hin. Scheint so, als ob ich mich doch nur minimal mit C++ auskenne und das "bisschen" schon überschätzt war. :/
Beim Compilen krieg ich keine Fehlermeldung und im Spiel (also im Menü) wird mir das Bild nicht angezeigt :/
Würde sich einer von euch eventuell dazu bereit erklären mir so etwas schnell zu basteln oder mal über meinen Code zu schauen? :x
Ich krieg das nicht hin. Scheint so, als ob ich mich doch nur minimal mit C++ auskenne und das "bisschen" schon überschätzt war. :/
Beim Compilen krieg ich keine Fehlermeldung und im Spiel (also im Menü) wird mir das Bild nicht angezeigt :/
Würde sich einer von euch eventuell dazu bereit erklären mir so etwas schnell zu basteln oder mal über meinen Code zu schauen? :x
Deine Funktion existiert gar nicht und wird deshalb nicht aufgerufen!
Das Callback heißt:
void onFrame(RPG::Scene scene)
und nicht
bool onFrame(char*pluginName)
Da dynloader.dll deine Funktion also dementsprechend nicht kennt, wird sie auch nie aufgerufen.
Edit:
Falsch ausgedrückt: Die Funktion existiert schon, du hast sie ja geschrieben. Nur versucht halt dynloader.dll eine void onFrame(RPG::Scene scene) Funktion aufzurufen, welche du ja nicht definiert und implementiert hast. Deshalb wird deine Funktion NICHT aufgerufen.
@Cherry
Oh danke, da habe ich dann wohl einfach total falsch gedacht - mein Fehler. Hatte SystemBackground jetzt mit dem MsgBox-Hintergrund gleichgesetzt. Aber danke, das wäre ich bestimmt früher oder später drüber gestolpert xD
PeAcE
MorDen
--
»Ein Traum kann auch die Wehmut nach der verlorenen Vergangenheit sein…«
»Manchmal ist eine Enttäuschung auch einfach nur das Ergebnis zu hoher Erwartungen.«
__________________________________________________________________________
Ah okay. Das hab ich nun geändert, es passiert aber trotzdem nichts. Und müsste der Compiler nicht normalerweise eine .dll datei erzeugen?
Das ist bei mir nämlich auch nicht der Fall, wie ich gerade gemerkt hab. ._.
Das sollte er, wenn du das Projekt korrekt als »Dynamic Link Library« angelegt hast. Wenn du aber das Output-Directory der DLL nicht änderst, landet diese im Verzeichnis deines C/C++-Projektes, nicht aber in deinem RPG-Maker-Projekt.
Edit:
Habe mir gerade mal deinen Code ein wenig genauer angesehen und frage mich, was das soll:
Du musst diese Funktion doch außerhalb erstmal als Funktion deklarieren und definieren -- dann kannst du sie aufrufen!
Des weiteren solltest du in C/C++ primitive Datentypen immer mit 0 oder ähnlichem initialisieren, da sie sonst einen zufälligen Wert am Anfang haben können, der nicht zwingend 0 sein muss.
PeAcE
MorDen
--
»Ein Traum kann auch die Wehmut nach der verlorenen Vergangenheit sein…«
»Manchmal ist eine Enttäuschung auch einfach nur das Ergebnis zu hoher Erwartungen.«
__________________________________________________________________________
Hi, ich gehe davon aus, dass deine DLL nicht richtig kompiliert und dein Code vom Compiler nicht mal bemerkt wird, denn es ist ausgeschlossen, dass dieser Code problemlos kompiliert. Gerade als Anfänger ist es sinnlos große Konstrukte zu machen bevor nicht einzelne Stücke funktionieren.
Fang doch damit an, ohne Schleifen, Scenes etc. einfach mal irgendwas auf den Bildschirm zu zeichnen.
Bild laden
Bild zeigen
Bild löschen
in 3 verschiedenen Callbacks!
Zitat
#define AUTO_DLLMAIN
#include <DynRPG/DynRPG.h>
int mmscn; // Methodensignatur falsch
bool onFrame(char*pluginName)
{
if (scene == RPG::SCENE_MENU)
{ // du hast hier eine Funktion in deine Funktion kopiert. // Das hier site in Funktionsaufruf
mmscn = getMenuScreen();
// das hier wird entweder ein Fehler oder die Klammern werden ignoriert und der onFrame-Callback beendet
{
return (**reinterpret_cast<char ***>(0x4CDC60))[12];
} // du solltest die getMenuScreen-funktion als Funktion in dein Projekt einfügen und dann aufrufen.
if (mmscn == 0)
{ // das hier wird funktionieren , und ein Bild von der Festplatte laden, 60 mal pro Sekunde, absoluter Performancekiller
RPG::Image *myExpImage;
myExpImage = RPG::Image::create();
myExpImage->useMaskColor = true;
myExpImage->loadfromFile("Picture\EXP_Percentage.png",false);
RPG::Actor * actorCurrent; // Global::etc. ist ein Namespace von mir, das solltest du schon ersetzen zB durch eine 4 ;-)
for (int i=0; i< Global::kNumberOfHeros; i++)
{ // die Schleife über das Switchkonstrukt ist grober Unfug. In meinem Samplecode folgr auf die Schleife ein Prüfen, ob ein Held auf der Gruppenposition 0 bis 3 vorhanden ist. Wenn du einfach nur an X Stellen überzeichnen willst, dann zeichne an X stellen, ohne Schleifen.
switch(i)
{
case 0: // wenn du optionale Parameter nicht angeben willst lass sie weg, srcWidth=1 etc. gehört hier nicht hin
RPG::Canvas::Draw(200, 41, myExpImage,srcX = 0, srcY = 0, srcWidth = -1, srcHeight = -1)
break;
case 1:
RPG::Canvas::Draw(200, 99, myExpImage,srcX = 0, srcY = 0, srcWidth = -1, srcHeight = -1)
break;
case 2:
RPG::Canvas::Draw(200, 157, myExpImage,srcX = 0, srcY = 0, srcWidth = -1, srcHeight = -1)
break;
default:
break;
}
}
}
else
{
RPG::Image::destroy(myExpImage);
}
}
return true;
}
Perfekt Corti^^
Ich hatte leider keine Zeit um dort so genau durchzugehen^^
PeAcE
MorDen
--
»Ein Traum kann auch die Wehmut nach der verlorenen Vergangenheit sein…«
»Manchmal ist eine Enttäuschung auch einfach nur das Ergebnis zu hoher Erwartungen.«
__________________________________________________________________________
Außerdem ist bei Picture\EXP.... ein Backslash zu wenig und RPG::Canvas::draw ist keine statische Methode sondern über RPG::screen->canvas->draw aufzurufen.
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!