AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Andorra 2D - GUI Tutorial
Tutorial durchsuchen
Ansicht
Themen-Optionen

Andorra 2D - GUI Tutorial

Ein Tutorial von igel457 · begonnen am 11. Nov 2007 · letzter Beitrag vom 22. Dez 2008
Antwort Antwort
Seite 2 von 2     12   
Romi

Registriert seit: 25. Apr 2007
72 Beiträge
 
#1

Re: Andorra 2D - GUI Tutorial

  Alt 14. Okt 2008, 20:43
Achso, ja, fast vergessen

Ist alles etwas durcheinander und nicht durchkommentiert, weil es nur ein Test ist. Aber so schwer sollte der Quelltext nicht sein

Delphi-Quellcode:
unit uSpiel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AdDraws, AdClasses, AdTypes, AdSprites, AdPNG, AdPerformanceCounter,
  AdComponents, AdGUI, AdGUIConnector;

type
  TBild = class(TImageSpriteEx)
    private
    protected
      procedure DoMove(TimeGap: double); override;
    public
      shake: boolean;
      procedure pict(pict: string);
      constructor Create(AParent:TSprite); override;
  end;

type
  TSpieler = class
    private
    protected
    public
      name: string;
      StatsPic: tBild;
      StatsPos: tPoint;
      Spielernummer: integer;
      constructor create(pName: string);
      destructor frei;
  end;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Idle(Sender:TObject; var Done:boolean);
  private
    { Private declarations }
  public
    procedure HauptSpielerHinzu(Sender: TObject);
    procedure HauptSpielerEntf(Sender: TObject);
    procedure HauptSpielerDone(Sender: TObject);
    procedure AddPlayerDone(Sender: TObject);
  end;

var
  Form1: TForm1;
  AdDraw: TAdDraw;
  AdSpriteEngine: TSpriteEngine;
  AdImageList: TAdImageList;
  AdPerCounter: TAdPerformanceCounter;
  AdGui: TAdGUI;
  AdConnector: TAdGUIConnector;
  Spieler: Array[0..9] of tSpieler;
  AnzSpieler: integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  AdDraw := TAdDraw.Create(self);
  AdDraw.DllName := 'AndorraOGl.dll';
  AdSpriteEngine := TSpriteEngine.Create(nil);
  AdSpriteEngine.Surface := AdDraw;
  AdImageList := TAdImageList.Create(AdDraw);
  AdPerCounter := TAdPerformanceCounter.Create;
  AnzSpieler := 0;

  AdGUI := TAdGUI.Create(AdDraw);

  if AdDraw.Initialize then
  begin
    Application.OnIdle := Idle;

    AdGUI.Skin.LoadFromFile('sunna.axs');
    AdGUI.Cursors.LoadFromFile('cursors.xml');
    AdGUI.LoadFromFile('hauptmenu.axg');
    AdConnector := TAdGUIConnector.Create(AdGUI);
    AdConnector.ConnectEventHandlers(AdDraw.Window);

    TAdButton(AdGUI.FindComponent('SpielerHinzu')).OnClick := HauptSpielerHinzu;
    AdImageList.Restore;
  end
  else
  begin
    ShowMessage('Grafikenginefehler.');
    halt;
  end;
end;

procedure TForm1.HauptSpielerHinzu(Sender: TObject);
begin
  AdGUI.LoadFromFile('Spielerhinzu.axg');
  TAdButton(AdGUI.FindComponent('done')).OnClick := AddPlayerDone;
end;

procedure TForm1.HauptSpielerEntf(Sender: TObject);
begin
  
end;

procedure TForm1.HauptSpielerDone(Sender: TObject);
begin

end;

procedure TForm1.AddPlayerDone(Sender: TObject);
begin
  inc(AnzSpieler);
  Spieler[AnzSpieler] := tSpieler.create(TAdEdit(AdGUI.FindComponent('name')).text);
  AdGUI.LoadFromFile('Hauptmenu.axg');
end;

procedure TForm1.Idle(Sender: TObject; var Done: boolean);
begin
  if AdDraw.CanDraw then
  begin
    AdPerCounter.Calculate;
    AdDraw.ClearSurface(clBlack);

    AdDraw.BeginScene;

    AdSpriteEngine.Move(AdPerCounter.TimeGap / 1000);
    AdSpriteEngine.Draw;
    AdSpriteEngine.Dead;

    AdGUI.Update(AdPerCounter.TimeGap / 1000);

    AdDraw.EndScene;

    AdDraw.Flip;
  end;
  Done := false;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  AdDraw.Free;
end;

constructor TBild.Create(AParent:TSprite);
begin
  inherited;

end;

procedure TBild.Pict(pict: string);
begin
  if AdImageList.Find(pict) = nil then
  begin
    with AdImageList.Add(pict) do
    begin
      Texture.LoadGraphicFromFile(pict, true, clFuchsia);
    end;
    AdImageList.Restore;
  end;

  self.SetImage(AdImageList.Find(pict));
end;

procedure TBild.DoMove(TimeGap: double);
begin
  inherited;

end;

constructor TSpieler.create(pName: string);
begin
  name := pName;
  Spielernummer := AnzSpieler;
  StatsPic := tBild.create(AdSpriteEngine);
  StatsPic.pict('pic/stats.png');
  StatsPic.Y := 1;
  StatsPic.X := (StatsPic.Width)*(Spielernummer) - StatsPic.Width;
  if StatsPic.X = 0 then StatsPic.X := 1;
end;

destructor TSpieler.frei;
begin

end;

end.
Konkret tritt das Problem auf, wenn TSpieler erzeugt wird (wird vom GUI aufgerufen).
  Mit Zitat antworten Zitat
Romi

Registriert seit: 25. Apr 2007
72 Beiträge
 
#2

Re: Andorra 2D - GUI Tutorial

  Alt 17. Okt 2008, 14:27
Weiß niemand Rat? Das komische ist, dass ich andere Sprites erzeugen kann, ohne dass das Menü nicht mehr bneuztbar ist - es muss also an tBild liegen, ich sehe jedoch gar keinen Unterschied zum anderen Sprite..

Edit: Stimmt nicht ganz. tBild kann ich auch ohne Probleme erzeugen, das Problem tritt nur auf, wenn tSpieler es erzeugt.
Edit2: Stimmt auch nicht ganz. Wenn ich tSpieler manuell erzeuge (mit einer eigenen Variabele), dann geht auch noch alles.
Edit3: Nun, es liegt scheinbar gar nicht an dem Sprite
Diese Zeile:
AdGUI.LoadFromFile('menu/Hauptmenu.axg'); macht das GUI unbrauchbar. Muss ich das irgentwie anders laden (Hauptmenu.axg wurde ja vorher schonmal geladen)?
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#3

Re: Andorra 2D - GUI Tutorial

  Alt 20. Dez 2008, 10:50
Aloha,

ich habe gleich mehrere Probleme mit der GUI

Erstens mal kann ich den AdGUIConnector nicht verwenden, da er in der Zeile
AdConnector.ConnectEventHandlers(self); meckert: "[Fehler] Unit1.pas(43): Inkompatible Typen: 'TAdWindowFramework' und 'TForm1'"...
Wieso?

Und, bissl blöder, weil man das nicht so leicht umgehen kann wie das AdConnector-Problem (da gibts ja ne Alternative):
Sobald ich
 AdGUI.Skin.LoadFromFile('sunna.axs'); //Laden des Skins aufrufe, kriege ich eine Exception: "Im Projekt Project2.exe ist eine Exception der Klasse ENoValidCompressor aufgetreten. Meldung: 'No compressor not found to load the compressed bitmap data.'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen."
Was für ein Kompressor fehlt da? Habe den mitgelieferten Sunna-Skin unverändert übernommen.
Er springt dann übrigens in die AdBitmap, Zeile 307 (procedure TAdBitmap.ReadRawData(AStream: TStream);).


Könnte irgendeiner der beiden Fehler damit zusammenhängen, dass ich partout die JVCL im Moment nicht installiert bekomme?
Florian Heft
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#4

Re: Andorra 2D - GUI Tutorial

  Alt 20. Dez 2008, 12:42
Okay, die Exception ist weg, man musste noch die TAdPNG einbinden

Aber noch ein anderes Problem: Wieso sieht die GUI bei mir so hässlich aus? Der scheint das ja irgendwie nicht richtig zu zeichnen (siehe Anhang).
Miniaturansicht angehängter Grafiken
andorra_158.jpg  
Florian Heft
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Andorra 2D - GUI Tutorial

  Alt 20. Dez 2008, 13:18
Probiere mal die neuste CVS-Version aus. Kann sein, dass das Problem dort gelöst ist. Mit meiner neuen Grafikkarte hatte ich auch so ähnliche Grafikfehler, ich habe sie jedoch weg bekommen. Du kannst aber auch noch ein paar Tage warten, dann wird es eine Bugfixversion geben.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#6

Re: Andorra 2D - GUI Tutorial

  Alt 20. Dez 2008, 14:29
OK, jetzt funktioniert es tatsächlich, danke!
Florian Heft
  Mit Zitat antworten Zitat
Florian H

Registriert seit: 30. Mär 2003
Ort: Mühlacker
1.043 Beiträge
 
Delphi 6 Professional
 
#7

Re: Andorra 2D - GUI Tutorial

  Alt 22. Dez 2008, 14:20
Ich bins schon wieder

Und zwar lade ich jetzt meine GUI (Hauptmenü) und setze danach die OnClick-Events einiger Buttons.
Das funktioniert auch prima, die entsprechenden Funktionen werden dann nach einem Klick aufgerufen.

Später will ich aber eine neue GUI laden+anzeigen (Pause-Menü) und weise den neuen Elementen wiederrum andere OnClick-Events zu - diese werden dann aber nicht mehr ausgeführt!
Sprich er ignoriert bei der später geladenen GUI einfach die Events.

Was ist da los?

Das ganze tritt immer dann auf, wenn ich durch neu-laden die alte GUI überschreiben und durch eine neue ersetzen will.
Florian Heft
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05: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-2025 by Thomas Breitkreuz