Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [Andorra2D] 2 AdDraws, nur eins wird gezeichnet (https://www.delphipraxis.net/110013-%5Bandorra2d%5D-2-addraws-nur-eins-wird-gezeichnet.html)

GrubenPete 11. Mär 2008 17:05


[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 Hier (Delphi-Treff) schonmal nen Post aufgemacht, aber dort wusste scheinbat niemand was darüber...(also nur zur Info)

Die Muhkuh 11. Mär 2008 17:07

Re: [Andorra2D] 2 AdDraws, nur eins wird gezeichnet
 
Hmm, warum nimmst Du nicht nur eins und zeichnest dort alles?

GrubenPete 11. Mär 2008 17:22

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^^

Die Muhkuh 11. Mär 2008 17:26

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:
type
  TAppMode = (apMenu, apGame);
Und beim Malen entscheidest Du dann, was gemalt werden soll, ob Menü oder Spielfläche or whatever.

Delphi-Quellcode:
proceudere Malen; // Hab es gerade beim AdDraw nicht im Kopf *g*
  case AppMode of
    apMenu: DrawMenu;
    apGame: DrawGame;
  end;
end;
So in der Art hatte ich das mal beim Rumspielen mit Andorra gemacht, hat eig. auch recht gut funktioniert.

GrubenPete 11. Mär 2008 17:44

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.

igel457 11. Mär 2008 17:57

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:

[Das manuelle Verknüpfen] bringt sogar noch einen weiteren Vorteil mit sich: Man stelle sich ein Aufbauspiel vor, in dem sich frei verschiebbare Fenster auf dem Bildschirm befinden. Woher soll das Spiel nun wissen, ob wir auf das Fenster, oder auf das Spielfeld geklickt haben? Bei der manuellen Verknüpfung ist das kein Problem:
Delphi-Quellcode:
procedure Form1Click(Sender:TObject)
var
  p:TPoint;
begin
  GetCursorPos(p); //Aktuelle Mauszeigerkoordinaten auslesen
  p := ScreenToClient(p); //In Koordinaten relativ zum Formular umrechnen
  if not AdGUI.Click(p.X, p.Y) then //Ereignisbehandlung ausführen
  begin
   //Es wurde auf das Spielfeld geklickt
  end;
end;

Hoffe geholfen zu haben und Danke fürs verwenden von Andorra 2D. Wenn du noch weitere Fragen hast, dann zögere nicht diese zu stellen.

Andreas

GrubenPete 11. Mär 2008 18:23

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...

GrubenPete 11. Mär 2008 19:02

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 ?!

igel457 11. Mär 2008 19:11

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

GrubenPete 11. Mär 2008 21:29

Re: [Andorra2D] 2 AdDraws, nur eins wird gezeichnet
 
Steh grad irgendwie völlig aufm Schlauch. sorry^^

Delphi-Quellcode:
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;
Kannst du mir sagen, was ich ändern muss, um das zum laufen zu bringen ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz