![]() |
Re: Andorra 2D [Ver. 0.35, 04.03.08]
Könntest du nicht intern in der Engine aud OnMouseLeave reagieren?
|
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.
|
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 ;) |
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^^ |
Re: Andorra 2D [Ver. 0.35, 04.03.08]
Vielleicht über die Eigenschaft
Delphi-Quellcode:
der GUI?
Visible
|
Re: Andorra 2D [Ver. 0.35, 04.03.08]
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
(Siehe Anhang) |
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ß |
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: ![]() Das Paket kann hier heruntergeladen werden: ![]() 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 |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Juchu, ich kann es kaum abwarten zu basteln... :firejump: :bouncing4:
Genieß deinen Urlaub |
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: |
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) |
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? :]
|
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.
|
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? |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Nein. Aber du kannst dir ja mal die
![]() |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Zitat:
Und was für Kleinigkeiten musstest du anpassen? |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
hm, mal so weit wie möglich zusammengezurrt:
Delphi-Quellcode:
und die Idle-Routine:
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
Delphi-Quellcode:
Und nein, ich rufe kein Setup2D-Engine auf. Sollte ich es denn tun?
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 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 |
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. |
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: |
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.
|
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... |
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. |
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. |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Hast du die Andorra-DLLs nach Update auf 0.4 neu erstellt?
|
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
|
Re: Andorra 2D [Ver. 0.40, 01.07.08]
ja, genauso siehts aus. :(
|
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 :) |
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:
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.
Finalize;
Initialize |
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. |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Zitat:
Delphi-Quellcode:
Damit gibt es bei mir keine Probleme. Wenn das nicht weiterhilft, kannst du die Sourcen mal anhängen?
procedure TMainDlg.Panel1Resize(Sender: TObject);
begin if AdDraw1.Initialized then begin AdDraw1.Setup2DScene; end; end; Zitat:
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. |
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...
|
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:
Wenn du das Problem unter Windows hast, versuche mal aktuelle Grafiktreiber zu installieren.
{$ifdef unix}
cthreads, {$endif} Forms, Main in 'Main.pas', lazopenglcontext; |
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 |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Liste der Anhänge anzeigen (Anzahl: 3)
Zitat:
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! |
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.
|
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:
Meine Mainform erzeugt im OnCreate eine Instanz von TSgGame:
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;
Delphi-Quellcode:
TSgGame.Setup sieht so aus:
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;
Delphi-Quellcode:
Der Vollständigkeit halber noch der Code aus dem OnResize des Panels:
procedure TSgGame.setup(width, height: integer);
begin {...} if AdDraw.Initialized then AdDraw.Setup2DScene; end;
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; |
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? |
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; |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Zitat:
Delphi-Quellcode:
Erläuterung:
// 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; 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. |
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. |
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