Delphi-PRAXiS
Seite 18 von 26   « Erste     8161718 1920     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Andorra 2D [Ver. 0.4.5.1, 31.12.08] (https://www.delphipraxis.net/81314-andorra-2d-%5Bver-0-4-5-1-31-12-08%5D.html)

Diamondback2007 25. Jun 2008 08:54

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Könntest du nicht intern in der Engine aud OnMouseLeave reagieren?

igel457 25. Jun 2008 09:36

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Wäre eine Lösung, allerdings leite ich dieses Event IMHO momentan nicht durch - ich glaube aber, das kann ich noch einbauen.

Diamondback2007 25. Jun 2008 11:25

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Ja, ich denke das wäre sinnvoll.
Nachteile sollte es keine geben aber Vorteile ;)
Vor allem wenn man als Zeiger die WIndowsversion hat siehts halt einfach komisch aus ;)

Looper 25. Jun 2008 20:51

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Hey,
da habe ich auch noch mal ne Frage, die hier ganz gut hinpasst.

Ist es möglich den Mauszeiger nicht anzeigen zu lassen, bzw. was muss ich ändern damit der Mauszeiger nicht mehr gezeichnet wird?
Wäre für mein Spiel relativ gut zu wissen, weil ich nicht immer die gesamte GUI zerstören und initialisieren will ;).

mfg Looper
--> Nun aber weiter Fussball sehen^^

Diamondback2007 25. Jun 2008 21:32

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Vielleicht über die Eigenschaft
Delphi-Quellcode:
Visible
der GUI?

inherited 26. Jun 2008 14:08

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von mimi
Ich denke die Lösung währe eine komplett neue AI Datei zu erstellen.
Leider läuft der Image Editor unter Linux nur bedingt. Also müsste ich erst einen eigenen schreiben für Linux. Was aber auch nicht viel Aufwand währe. Müsste ich mir überlegen.

Ich arbeite im Moment daran die Demos und Tools für Lazarus und Linux zu portieren, habe also noch etwas Geduld :)
(Siehe Anhang)

Diamondback2007 27. Jun 2008 15:20

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Hallo, da ich ja jetzt herausgefunden habe, wie ich neue Schriftarten erstelle fände ich eine FUnktion zum Editieren der Schriftarten noch ganz schön. Vielleicht ein Doppelklick in der Liste oder so und dann öffnet sich das Standard-erstellen feld mit den Werten der Schriftart.

gruß

igel457 1. Jul 2008 13:42

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Da im aktuellen CVS-Archiv anscheinen keine Fehler mehr drin waren (auf jeden Fall hat niemand einen gemeldet...)

Version 0.4 erschienen

Andorra 2D Version 0.4 ist da!

Es bringt ein neues Surface-System, Shader-Support (HLSL und Cg), nativen TGA und GZIP-Package Untersützung, neue GUI Komponenten, überarbeitete Partikelsysteme, besseren Lazarus und Linux Support, aktualisierte Dokumentation und noch viel mehr.

Eine komplette Liste mit allen Änderungen findet sich hier:
http://andorra.sourceforge.net/index...ion=changelogs

Das Paket kann hier heruntergeladen werden:
http://andorra.sourceforge.net/index...tion=downloads

Wichtig:
Alle Benutzer von OpenGL sollten aufpassen: Andorra 2D verwendet nun einige Extensions, die Teilweise erst mit den letzten Grafikkartentreibern flächendeckend unterstützt werden. Die Grafikkarte muss in jedem Fall komplett DirectX 9 kompatibel sein.
Ich arbeite aber schon an einer Lösung...

Viel Spaß damit, ich bin jetzt erstmal eine Weile auf Urlaub,
Andreas

Codewalker 1. Jul 2008 15:25

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Juchu, ich kann es kaum abwarten zu basteln... :firejump: :bouncing4:

Genieß deinen Urlaub

inherited 1. Jul 2008 20:58

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Lazarus oder Delphi?
Und schönen Urlaub Andreas :cheers:
Hoppla, war auf einer anderen Seite gelandet und hatte das mit dem inline gelesen :wall:

Codewalker 2. Jul 2008 11:40

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin zusammen.

Auch wenn Andreas im Urlaub ist, kann mir vielleicht jemand helfen. Ich habe auf die 0.4 gewechselt (und musste beim TAdSetupDlg ein paar Kleinigkeiten ändern), sehe aber jetzt nicht mehr meine Landschaft im ganzen, sondern eine nahezu schwarze Fläche, und nur beim scrollen oben links in der Ecke einen kleinen Teil des Spielfeldes, der aber auch immer wieder im Schwarz verschwindet. Jemand eine Ahnung was zu tun ist (DLLs schon durch die von 0.4 ersetzt)

Florian H 2. Jul 2008 12:35

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Für die nicht so versierten: was bringen die Neuerungen wie die Shadersache? Beispielscreenshots oder Demos der neuen Funktionen? :]

3_of_8 2. Jul 2008 13:45

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Unter anderem kannst du damit Texturen auf der GPU manipulieren und anderes aufwändiges Grafikzeug dorthin auslagern, um die CPU zu schonen.

Namenloser 2. Jul 2008 14:10

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Hey,
cool dass es jetzt Shader gibt. Jetzt muss ich nur noch lernen wie man die programmiert xD
Gibts denn ein Tutorial wie man die einbindet?

3_of_8 2. Jul 2008 14:42

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Nein. Aber du kannst dir ja mal die Dokumentation durchlesen. (Dateien AdShader.pas und AdShaderClasses.pas), vielleicht reicht die aus.

inherited 2. Jul 2008 16:10

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Zitat:

Zitat von Codewalker
Moin zusammen.

Auch wenn Andreas im Urlaub ist, kann mir vielleicht jemand helfen. Ich habe auf die 0.4 gewechselt (und musste beim TAdSetupDlg ein paar Kleinigkeiten ändern), sehe aber jetzt nicht mehr meine Landschaft im ganzen, sondern eine nahezu schwarze Fläche, und nur beim scrollen oben links in der Ecke einen kleinen Teil des Spielfeldes, der aber auch immer wieder im Schwarz verschwindet. Jemand eine Ahnung was zu tun ist (DLLs schon durch die von 0.4 ersetzt)

Hmmm. Rufst du irgendwo Setup2dScene auf? Wenn nein würde ich gerne etwas Code sehen. Wenn du ihn hier nicht Posten magst kannst du vielleicht ein neues Projekt erzeugen und das Problem rekonstruieren oder mir den Code per PN schicken, ich werde ihn nicht irgendwie "klauen".
Und was für Kleinigkeiten musstest du anpassen?

Codewalker 2. Jul 2008 18:06

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
hm, mal so weit wie möglich zusammengezurrt:

Delphi-Quellcode:
var
  AdSetupDlg: TAdSetup;
begin
  AdDraw := TAdDraw.Create(Parent);
  AdSetupDlg     := TAdSetup.Create(Canvas);
  AdSetupDlg.Image := 'Logo.png';

  if AdSetupDlg.Execute then
  begin
    if Canvas.Initialize then
    begin
      State     := [rsFPS, rsMap];
      InputState := [];
    end
    else
    begin
      Result := False;
      Exit;
    end;
  end
  else
    halt;
  AdSetupDlg.Free;
  Result := True;
  Application.OnIdle := Idle; // Renderingschleife zuweisen
und die Idle-Routine:

Delphi-Quellcode:
 PerformanceCounter.Calculate;
 DoScroll(PerformanceCounter.TimeGap); // Scroll in der Sprite-Engine

  if Canvas.CanDraw then //Wenn überhaupt auf das AdDraw gezeichnet werden kann dann...
  begin
    Canvas.ClearSurface(0); //Füllt die Oberfläche mit schwarzer Farbe

    Canvas.BeginScene;

    if (rsFPS in State) then
      RenderFPS;
    if (rsMap in State) begin
        SpriteEngine.Dead;
        SpriteEngine.Draw;
      end;


    Canvas.EndScene;

    Canvas.Flip; //Präsentiert die gezeichneten Dinge auf dem Bildschirm.
  end;
Und nein, ich rufe kein Setup2D-Engine auf. Sollte ich es denn tun?

Und die Kleinigkeiten:

Der Parameter im Konstruktor von TAdSetupDlg ist kein Form mehr, sondern ein TAdDraw und es gibt die Properties Parent (TForm) und ... noch eins (vergessen) nicht mehr

inherited 2. Jul 2008 19:09

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Zeig mir bitte mal die Stelle, an der du die SpriteEngine erstellst.
Was genau da schief geht kann ich dir leider nicht sagen, da musst du eventuell warten bis der Igel wieder da ist.
Was mir beim Anschauen des Andorra-Codes eben aufgefallen ist, ist dass offenbar das interne Surface-Rect der Spriteengine erst beim Aufruf von TSpriteEngine.Move gesetzt bzw aktualisiert wird. Vielleicht hilft einmaliger oder regelmäßiger Aufruf von Move.

Codewalker 2. Jul 2008 19:13

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Args, der Aufruf von Move im Idle hat alles geklärt. Ist aber wohl auch erst seit der 0.4 so.
Move hatte ich bisher nicht drin, weil noch keine Animationen oder Bewegungen drin waren (und scrollen klappte mit 0.35 auch so :mrgreen: ).
Danke für die Hilfe :thumb:

inherited 2. Jul 2008 20:11

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Ich halte das auch für nicht gewollt. Das eigene Surface sollte eigentlich auch vorher schon einmal gesetzt werden. ich schreib's mir auf und sag es dem Igel wenn er wieder da ist.

Diamondback2007 3. Jul 2008 12:35

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Also, ich habe mein Programm nun mal auf Version 0.4 geupdatet.
Ich habe allerdings noch so meine Probleme...
Zum einen kann ich kein Antialias verwenden. Bei Benutzung gibt er mir in jedem Renderdurchlauf eine AV.
Das geschieht sowohl bei OGL als auch bei DX.
Ich habe auch die neusten Treiber.

Zum anderen würde ich gerne wissen, ob es eine Möglichkeit gibt die Shader komplett zu deaktivieren...
Weil ich brauche sie nicht wirklich, habe aber auch keine Lust die ganzen Dlls mitzuliefern...

inherited 3. Jul 2008 14:07

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Bei mir funktioniert Antialias weiterhin ohne probleme :gruebel: (Linux, lazarus, ad04, OGL)
Alles was du tust ist AdDraw.Options um aoAntialias zu erweitern, richtig? Hast du die DLL neu erstellt?

Zum Thema Shader: Ich glaube, wenn du die Erweiterungs-DLL für Shader nicht kompilierst und dazu packst, wird das Shadersystem auch nicht aktiviert.
Da ist der Igel aber auch sicherlich schlauer und wird dir da mehr drüber erzählen können.

Diamondback2007 3. Jul 2008 18:21

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
ja, ich habs halt über den Optionsdialog gemacht, kommt aber ja aufs selbe raus.

Wenn ich einfach die Dlls weglasse bekomme ich nur Fehler, dass die Dlls halt fehlen.

inherited 3. Jul 2008 22:14

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Hast du die Andorra-DLLs nach Update auf 0.4 neu erstellt?

Codewalker 3. Jul 2008 22:22

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Ich kann das bestätigen. Ich habe die DLLs neu erstellt mit 0.4 und er vermisst die CgD3d9d.dll, startet nach der Fehlermeldung trotzdem. Generell ist es blöd, dass er die *d.dll - Varianten haben will, weil das die Debug-Dlls sind, die bei der normalen DirectX-Installation nicht dabei sind, sondern nur im DirectX SDK. (Die Dll aus den redistributables wäre dann nicht CgD3D9d.dll sondern CgD3D9.dll). Wäre auch ein Punkt für den Igel

Diamondback2007 4. Jul 2008 07:27

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
ja, genauso siehts aus. :(

EugenB 5. Jul 2008 00:16

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Seit der 0.4 Version läuft zumbeispiel SimplePart bei mir nicht mehr, was heißt hier nicht mehr laufen? .... der ganze Rechner hängt sich auf dabei -.-

besser wäre es wenn man die neuen Sachen ( kp welche ) abschalten könnte damit auch mein Rechner es anzeigen kann mit der vorherigen Version funktionierte es einwandfrei

Achja dann hätte ich noch was, wieso benutzt du unter Lazarus nicht die LCL bzw FCL diese kann PNG lesen und dann müsste man sich nicht stundenlang rumschlagen und die AdPng Unit zum laufen zu bekommen bzw dessen benötigten Units ( nach 40 Min habe ich es aufgegeben^^)

Der Rest wird später getestet^^
Gn8 :)

Namenloser 5. Jul 2008 02:50

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Ich habe jetzt auch ein Problem, bzw eine Frage, und zwar folgendes: Wie kann ich die Größe der Zeichenflöche nachträglich anpassen (z.B. beim vergrößern des Fensters)?
Früher habe ich das mit
Delphi-Quellcode:
Finalize;
Initialize
gemacht, aber das führt jetzt leider zu einem fehler. Nun gut, ist ja auch nicht gerade die fruendliche Variante. Im Partikeleditor habe ich gesehen, dass im OnResize Setup2dScene aufgerufen wird. Also habe ich das damit auch mal probiert, es verändert sich zwar etwas, aber irgendwie wird die darstellung komisch verzerrt und wenn das Fesnter sehr klein ist, verschwinden sogar Teile der Darstellung.

Codewalker 5. Jul 2008 08:36

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Das mit dem Setup2DScene werde ich die Tage auch wieder brauchen - wenn ich es damit hinkriege poste ich es hier.

Und noch was für den Igel, wenn er wieder da ist: Im ImgEdit wäre es toll, wenn für das Öffnen von Listen und das Hinzufügen von Bildern zwei unterschiedliche Open-Dialoge verwendet werden. Ich lagere die Listen im Spielverzeichnis und die Grafiken in einem anderen Verzeichnis. Da sich der OpenDialog immer nur den letzten Pfad merkt muss ich immer wieder hin und her wandern und das kostet unglaublich Zeit und nervt einfach nur.

inherited 5. Jul 2008 13:58

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Zitat:

Zitat von NamenLozer
Ich habe jetzt auch ein Problem, bzw eine Frage, und zwar folgendes: Wie kann ich die Größe der Zeichenflöche nachträglich anpassen (z.B. beim vergrößern des Fensters)?
Früher habe ich das mit
Delphi-Quellcode:
Finalize;
Initialize
gemacht, aber das führt jetzt leider zu einem fehler. Nun gut, ist ja auch nicht gerade die fruendliche Variante. Im Partikeleditor habe ich gesehen, dass im OnResize Setup2dScene aufgerufen wird. Also habe ich das damit auch mal probiert, es verändert sich zwar etwas, aber irgendwie wird die darstellung komisch verzerrt und wenn das Fesnter sehr klein ist, verschwinden sogar Teile der Darstellung.

Auszug aus dem ImageList Editor: (Andorra 0.4)
Delphi-Quellcode:
procedure TMainDlg.Panel1Resize(Sender: TObject);
begin
  if AdDraw1.Initialized then
  begin
    AdDraw1.Setup2DScene;
  end;
end;
Damit gibt es bei mir keine Probleme. Wenn das nicht weiterhilft, kannst du die Sourcen mal anhängen?


Zitat:

Zitat von EugenB
Seit der 0.4 Version läuft zumbeispiel SimplePart bei mir nicht mehr, was heißt hier nicht mehr laufen? .... der ganze Rechner hängt sich auf dabei -.-

besser wäre es wenn man die neuen Sachen ( kp welche ) abschalten könnte damit auch mein Rechner es anzeigen kann mit der vorherigen Version funktionierte es einwandfrei

Achja dann hätte ich noch was, wieso benutzt du unter Lazarus nicht die LCL bzw FCL diese kann PNG lesen und dann müsste man sich nicht stundenlang rumschlagen und die AdPng Unit zum laufen zu bekommen bzw dessen benötigten Units ( nach 40 Min habe ich es aufgegeben^^)

Ich versuche gerade die Fehlerstelle genau zu lokalisieren, jedenfalls habe ich mit dieser Demo auch Probleme.
Es sieht ganz danach aus als hätte es etwas mit den Threads zu tun die erstellt werden.
AdPNG kannst du glaube ich unter Lazarus nicht benutzen, weil diese auf PNGUnit zugreift die A) nur für Delphi ist und B) offenbar gerade überhaupt nicht mehr angeboten wird.
Der Bork arbeitet IIRC an einer plattformunabhängigen Alternative.
Bis dahin kann ich dir für Lazarus unter Windows sowie Linux die FreeImage-Library empfehlen, die kann ohne weiteres auch PNG.

Diamondback2007 5. Jul 2008 14:02

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Ist es eigentlch normal, dass wenn ich Setup2DScene aufrufe, dass dann zwar die Grafiken resized werden, aber scheinbar die Größe und die Position intern nicht? Onclickevents meiner Sprites die über position und Größe definiert werden klappen dann nicht mehr korrekt...

inherited 5. Jul 2008 14:15

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Liste der Anhänge anzeigen (Anzahl: 1)
Was genau meinst du? Wenn ich setup2dScene aufrufe, wird die Spielfeldgröße geändert, sonst keine Größen verändert :gruebel:
@EugenB: benutzt du Windows oder Linux? Unter Linux läuft das ganze ohne Probleme bei mir, nachdem ich cthreads als erste Unit des programms hinzugefügt habe, in der Projektdatei habe ich also stehen:
Delphi-Quellcode:
  {$ifdef unix}
    cthreads,
  {$endif}
  Forms,
  Main in 'Main.pas', lazopenglcontext;
Wenn du das Problem unter Windows hast, versuche mal aktuelle Grafiktreiber zu installieren.

EugenB 5. Jul 2008 14:21

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Benutze Windows, unter Windows laufen Threads eigentlich sofort

wenn ich die aktuelle Treiber von ATI installieren will kommt auf einmal "Die Treiber passen nicht zur Grafikkarte" = ATI Doof -.- ich versuchs später nochmal mal sehn ob dann die Treiber passen löl

Edit: Da die Installation immer abgebrochen ist, war ich mal so dreist und habe die Treiber von hand ausgewählt und voila die Demos laufen schonmal ^^

Edit2: Also ich kann nichtmal das erstellte Programm starten, benutze die SVN Version von Lazarus also 0.9.25 werde es später mit der 0.9.24 probieren mal sehn ob es dann geht

Namenloser 5. Jul 2008 18:32

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Liste der Anhänge anzeigen (Anzahl: 3)
Zitat:

Zitat von inherited
Delphi-Quellcode:
procedure TMainDlg.Panel1Resize(Sender: TObject);
begin
  if AdDraw1.Initialized then
  begin
    AdDraw1.Setup2DScene;
  end;
end;
Damit gibt es bei mir keine Probleme. Wenn das nicht weiterhilft, kannst du die Sourcen mal anhängen?

Das unterschiedet sich außer durch die if-Abfrage (die ich testweise auch eingebaut hab) nicht von meinem Code. Das Anhängen es Codes würde etwas schwierig, weil es sich bei dem Programm um einen Leveleditor handelt, der gleichzeitig auch die gesamte Spielphysik etc. (die mittlerweile allerdings alles andere als fertig ist bzw funktioniert) beinhaltet, sprich: da steckt relativ viel (größtenteils unkommentierter :/) Code sowie einige "Ressourcen-Dateien" dahinter, die ich mitliefern müsste, damit das Programm überhaupt kompiliert/funktioniert.

Wie auch immer, ich habe jetzt die Beobachtung gemacht, dass die Sprites irgendwie ihre richtige Größe behalten, obwohl sie gleichzeitig bei steigender Größe des Fensters/Panels pixeliger werden. Es macht fast den Eindruck, als würde hier etwas erst herunterskaliert und dann wieder hochskaliert. Wenn ich das Fenster kleiner als die Ursprungsgröße mache, werden die Sprites verkleinert. Bei der exakten Ursprungsgröße ist alles perfekt.

Ich habe 3 Screenshots angehängt, die das Problem ganz gut zeigen.


Vielen Dank für eure Hilfe!

inherited 5. Jul 2008 19:39

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Hmmm,d as sieht in der Tat falsch aus. Zeig mir mal bitte deinen Initialisierungscode, also da wo du dein AdDraw erstellst.

Namenloser 5. Jul 2008 20:17

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Hallo, inherited.

Also ich habe eine Klasse namens TSgGame, die sich um die Erstellung und Verwaltung des AdDraw-Objekts kümmert. Das Fenster, auf das gezeichnet werden soll, wird als Parameter Parent übergeben.
Delphi-Quellcode:
constructor TSgGame.Create(const Parent: tWinControl);
begin
  inherited Create;

  fPerformanceCounter := tAdPerformanceCounter.Create;
  AdDraw := TAdDraw.Create(parent);
  AdDraw.DllName := 'AndorraDX93D.dll';
  {...}
//  Setup(parent.width,parent.height); <-- hab ich testweise in's OnCreate der Form verschoben. weiß nicht mehr wieso >.<
  adDraw.Initialize;
end;
Meine Mainform erzeugt im OnCreate eine Instanz von TSgGame:
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
  {...}
  pDrawScreen.Align := alClient; // pDrawScreen ist das TPanel auf das gezichnet werden soll
  pDrawScreen.Caption := '...';
  {...}
  game := tsggame.Create(pDrawScreen);
  game.setup(pdrawscreen.width,pdrawscreen.height);
  {...}
  windowstate := wsmaximized;
  {...}
end;
TSgGame.Setup sieht so aus:
Delphi-Quellcode:
procedure TSgGame.setup(width, height: integer);
begin
  {...}
  if AdDraw.Initialized then
    AdDraw.Setup2DScene;
end;
Der Vollständigkeit halber noch der Code aus dem OnResize des Panels:
Delphi-Quellcode:
procedure TfrmMain.pDrawScreenResize(Sender: TObject);
begin
  if assigned(game) then // <-- Die Prüfung ist wegen dem doofen Bug, dass OnResize auch nach dem OnDestroy noch aufgerufen wurde oder so...
    game.setup(pdrawscreen.width,pdrawscreen.height);
end;

inherited 5. Jul 2008 22:06

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Da bin ich jetzt ehrlich gesagt etwas ratlos, das sieht eigentlich korrekt aus :gruebel:
Könntest du eventuell nochmal deine Zeicheroutine zeigen?

Diamondback2007 6. Jul 2008 01:13

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also zum Thema Texturen werden vergrößert, die OnClick-Events aber nicht richtig berechnet geb ich euch hier mal eine Demo.

Einfach mal das Spiel starten und dann das Fenster resizen. Dann versucht mal die Buttons anzuklicken...

Der Code zum Überprüfen ob ein Button gedrückt wurde ist der folgenden:
Delphi-Quellcode:
function TGameButton.CheckOnClick(aX, aY: Integer; Up: Boolean): Boolean;
begin
  Result := false;
  if Enabled then
    begin
      if ((aX < X + Width) and (aX > X)) and
        ((aY > Y) and (aY < Y + Height)) then
        begin
          Result := true;
          if Up then
            OnUp
          else
            OnDown;
        end
      else
        begin
          ButtonStat := bsUp;
          ChangeTex(true);
        end;
    end;
end;

Namenloser 6. Jul 2008 02:38

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Zitat:

Zitat von inherited
Da bin ich jetzt ehrlich gesagt etwas ratlos, das sieht eigentlich korrekt aus :gruebel:
Könntest du eventuell nochmal deine Zeicheroutine zeigen?

Der Code zum Zeichnen der Tiles ist in diesem Fall folgender:
Delphi-Quellcode:
// Diese procedure wird von TSgGame für jedes Tile aufgerufen, dass gezeichnet werden soll:
procedure TSgGame.DoPaintTile(const Tile: tSgTile);
var
  done: boolean;
begin
  done := false;
  if Assigned(fOnPaintTile) then
    fOnPaintTile(Tile,done);
  if not done then
    if Tile.sprite <> nil then
      Tile.DrawTo(adDraw,Camera);
end;

// Diese procedure wird durch den obigen Code aufgerufen:
procedure TSgEditMode.PaintTile(const Tile: tSgTile; var Done: Boolean);
{...}
begin
  {...}
  if Tile.sprite <> nil then
  begin
    Tile.sprite.Color := cl; // Tile wird je nach Typ eingefärbt
    Tile.sprite.Draw(fParent.adDraw,round(Tile.left-fParent.Camera.left),
      round(Tile.top-fParent.Camera.top),0);
    Tile.sprite.Color := clwhite;
  end;
  {...}
  Done := True;
end;
Erläuterung:
Ich habe Zusatzfunktionen, wie zum Beispiel die Editorfunktion als eine Art "Plugin" geplant. TSgGame verwaltet eine Liste mit Plugins, die sich in bestimmte Events einklinken können, um bestimmte Funktionen nachzurüsten (praktisch z.B. für einen Debug-Mode).
Dieses Plugin belegt das Event OnPaintTile des TSgGame-Objektes. Das Plugin sorgt dann dafür, dass z.B. ein Rahmen um das Tile gezeichnet wird, der im Spiel hinterher natürlich nicht erschinen soll, und dass das Tile eingefärbt wird.


Schlussendlich noch die Paint-Routine von TSgGame:
Delphi-Quellcode:
procedure TSgGame.Paint;
var
  x1,y1,x2,y2: integer;
  i: integer;
  tmptilelist: tsgtilelist;
begin
  if addraw.CanDraw then
  begin
    fPerformanceCounter.Calculate;
    fTimeGap := fPerformanceCounter.TimeGap/100;

    adDraw.BeginScene;
    adDraw.ClearSurface(clblack);

    // Der folgende Code scheint etwas komplex, was daran liegt, dass ich die gesamte Spielfläche
    // zur Optimierung in ein Raster unterteile. Jede Zelle enthält eine Liste, die speichert, welche
    // Tiles in ihr liegen.
    // Der Code tut also folgendes: Er sucht alle Quadrate die im Sichtfeld liegen und liest alle in
    // diesen Quadraten vorhandenen Tiles in eine temporäre Liste ein. In der for-Schleife wird dann
    // jedes Element gezeichnet. (natürlich kann schlimmstenfalls es passieren, dass ein Tile so 4 mal
    // gezeichnet wird, was aber imemr noch effizienter sein dürfte, als immer ALLE Tiles zu zeichnen
    x1 := floor(camera.left-bg_sectorsize);
    y1 := floor(camera.top-bg_sectorsize);
    x2 := floor(camera.left+camera.width);
    y2 := floor(camera.top+camera.height);

    tmptilelist := tsgtilelist.Create(false);
    Map.Grid.TilesNearRect(x1,y1,x2,y2,tmptilelist);
    for i := 0 to tmptilelist.Count - 1 do
      DoPaintTile(tmptilelist[i]);
    freeandnil(tmptilelist);

    {...}

    adDraw.EndScene;
    adDraw.Flip;
  end;
end;

@Diamondback2007:
Also das erste Fenster kann ich bei dir nicht in der Größe verändern, und im zweiten ändert sich die Größe der Darstellung nicht und die Buttons funktionieren auch.
Bei mir werden die Koordinaten nur beim kleinen Screenshot falsch zugeorndet, der Rest funktioniert.

Diamondback2007 6. Jul 2008 09:31

Re: Andorra 2D [Ver. 0.40, 01.07.08]
 
Ähm ich meine nicht die GUI, sondern das Spiel. erst mal Spiel starten drücken ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:28 Uhr.
Seite 18 von 26   « Erste     8161718 1920     Letzte »    

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