![]() |
[Andorra2D] 2 AdDraws, nur eins wird gezeichnet
Hey, ich benutze die Andorra2D Engine um ein Menu und ein Spielfeld anzuzeigen.
Das Menü wird ein einem zur Laufzeit erstellten Formular mit einer AdDraw-komponente dargestellt, das Spielfeld mit einer anderen Instanz der AdDraw-Komponente auf dem 'Hauptformular' Je nachdem welches AdDraw zuerst 'created' wird, wird nur das Spielfeld oder das Menu angezeigt. (Das was zuletzt erstellt wurde, wird angezeigt)... Habt ihr eine Idee, an was das liegen könnte ? P.S.: Hab ![]() |
Re: [Andorra2D] 2 AdDraws, nur eins wird gezeichnet
Hmm, warum nimmst Du nicht nur eins und zeichnest dort alles?
|
Re: [Andorra2D] 2 AdDraws, nur eins wird gezeichnet
Hui, das ging aber fix :-D
Naja, hab eine Spielfläche (AdDraw Nr. 1; Form1) und ein Menü (AdDraw Nr. 2; Form2). Form2 wird zur Laufzeit 'auf' Form1 erstellt. Das mit einem AdDraw hat irgendwie nicht geklappt... Hab ne Klasse von TPanel abgeleitet und dort die Spielfläche reingepackt. Wenn ich dann das AdGUI Menü hinzugefügt hab, konnte ich das zwar anzeigen lassen, aber der GuiConnector zeigte keine Wirkung, also es wurde kein Event ausgelöst, wenn man mit der Maus über die Buttons fuhr. Wenn mir einer sagen kann, wie ich die Events manuell mit MousePos oder so ausführen kann, dann wäre mir auch sehr geholfen^^ |
Re: [Andorra2D] 2 AdDraws, nur eins wird gezeichnet
Hi,
ich würde nur eine Form nehmen und dort ein AdDraw drauf werfen und dann im Programm eine Enumeration erstellen. z.B.:
Delphi-Quellcode:
Und beim Malen entscheidest Du dann, was gemalt werden soll, ob Menü oder Spielfläche or whatever.
type
TAppMode = (apMenu, apGame);
Delphi-Quellcode:
So in der Art hatte ich das mal beim Rumspielen mit Andorra gemacht, hat eig. auch recht gut funktioniert.
proceudere Malen; // Hab es gerade beim AdDraw nicht im Kopf *g*
case AppMode of apMenu: DrawMenu; apGame: DrawGame; end; end; |
Re: [Andorra2D] 2 AdDraws, nur eins wird gezeichnet
Das is ne gute Idee, aber mein Problem mit den Events wird dadurch noch nicht gelöst.
|
Re: [Andorra2D] 2 AdDraws, nur eins wird gezeichnet
Hallo,
mehrere Instanzen von TAdDraw werden zurzeit leider nicht Unterstützt. Die neue Version (0.3.5) sollte eigentlich beliebige Steuerelemente (also Form, Panel etc.) unterstützen und deren Events verknüpfen. Ein anderer Weg ist die Events manuell mit dem GUI-System zu verbinden. Zitat aus dem GUI-Tutorial: Zitat:
Andreas |
Re: [Andorra2D] 2 AdDraws, nur eins wird gezeichnet
Ok, danke erstmal...
Werd dann mal die neue Version probieren und wenn das nichts bringt den letzten Vorschlag... |
Re: [Andorra2D] 2 AdDraws, nur eins wird gezeichnet
Doch noch ne Frage^^
Hab ich das jetzt richtig verstanden ?! Ich habe also meine Beiden Klassen, abgeleitet von TPanel... Ein Menü und ein Spielfeld. Zunächst erstelle ich also 2 TAdWindowFramework's und lasse jeweils eines auf mein MenüPanel und eines auf mein SpielfeldPanel zeigen. (BindTo) Dann für mein Menü noch ein AdGuiConnector. Danach initialisiere ich mein AdDraw und es sollte funktionieren ?! |
Re: [Andorra2D] 2 AdDraws, nur eins wird gezeichnet
Hallo,
eigentlich sollte einfach folgendes funktionieren: - Initialisieren des AdDraw - Laden der GUI - TAdGUIConnector verwenden um die GUI mit dem Panel zu verbinden - Die Events für das Spiel können wie gewohnt verwendet werden Wie schon oben gesagt, kann eine Anwendung gleichzeitig maximal eine TAdDraw Komponente besitzen - du musst einfach bedenken, dass TAdDraw die komplette DirectX/OpenGL Schnittstelle kapselt. Und von dieser kann es in einer Anwendung eben nur eine geben. Wie Manuel oben schon geschrieben hat, kannst du sowohl Menü als auch Spiel auf ein AdDraw (oder in deinem Fall deine Komponente) zeichnen. Das Menü kannst du einfach über "AdGUI.Visible := false" unsichtbar machen. Ich hoffe, das das jetzt etwas klarer für dich geworden ist. Wenn du noch Fragen hast - immer her damit. Andreas |
Re: [Andorra2D] 2 AdDraws, nur eins wird gezeichnet
Steh grad irgendwie völlig aufm Schlauch. sorry^^
Delphi-Quellcode:
Kannst du mir sagen, was ich ändern muss, um das zum laufen zu bringen ?
procedure THauptMenu.FormCreate(Sender: TObject);
begin myAdDraw := TAdDraw.Create(self); myAdDraw.DllName := 'AndorraOGL.dll'; myAdDraw.Display.Width := HauptMenu.Width; myAdDraw.Display.Height := HauptMenu.Height; if myAdDraw.Initialize then begin MainGui := TAdGui.Create(myAdDraw); MainGui.Skin.LoadFromFile('sunna.axs'); MainGui.Cursors.LoadFromFile('cursors.xml'); MainGui.LoadFromFile('mainmenu.axg'); // Hab so versucht ein WindowFramework zu erstellen: wfw := TAdWindowFramework.Create; wfw.BindTo(@self); // --> Abstrakter Fehler MainConnector := TAdGUIConnector.Create(MainGui); MainConnector.ConnectEventHandlers(wfw); //Früher war das 'self' also mein Formular TAdButton(MainGUI.FindComponent('exit_game')).OnClick := AdButtonClick; TAdButton(MainGUI.FindComponent('start_game')).OnClick := AdButtonClick; end else showmessage('Fehler'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz