|
Antwort |
Andorra 2D
Was ist Andorra 2D? Nein, Andorra 2D hat nichts mit dem kleinen europäischen Staat "Andorra" zu tun. Wie das "2D" im Namen auch schon erraten lässt, handelt es sich um eine 2D Engine. Diese wird für Delphi und Lazarus (Freepascal) entwickelt und zwar um das bekannte und oft verwendete DelphiX abzulösen (was an DelphiX nicht so toll ist lest ihr am besten hier). Andorra 2D hat einen ähnlichen Aufbau wie DelphiX - das Spriteengineinterface ist sogar zu 99% das Gleiche. Features Was ist nun das Besondere an Andorra 2D? - Hardwarebeschleunigung - Verwendung von Plugins zur Grafikdarstellung wodurch OpenGL, DirectX oder sogar die GDI mit Andorra 2D verwendet werden können - Integrierte und beschleunigte Spriteengine - Integrierte Zoomfunktion in der Spriteengine - Modularer aufbau von den Loadern für Texturformate, es können einfach eigene Hinzugefügt werden - orthogonale und perspektivische Projektionsmatrix - Integration von 3D-Modellen (die Loader sind noch nicht geschrieben) - Schnelle Partikelsysteme - Ausnutzung von Multi-Core CPUs - Lichter - Shadersupport (Cg und HLSL) - Einfaches Surface-System - Einfaches Scenenmanagement - Videowiedergabe mit MPEG2 Support - Verwendung von mehreren "Windowframeworks", wodurch Unabhängikeit von der VCL/LCL erreicht wird. - Clipping/Splitscreens - 2D Physikengine mit Newton - Integriertes "Hardware Canvas" - Mächtiges, voll Skinbares GUI-System - Nicht überladen - man wird nicht zum benutzen bestimmter Features gezwungen (wie zum Beispiel Datenpackages, wie dies in anderen Engines der Fall ist) - Opensource, entweder unter der CPL oder der GPL verwendbar - Mächtiges Bundle von Editoren und Tools - Deutsche Tutorials - Viele Demos - Und natürlich die Banalitäten, die man sich von einer 2D-Engine so wünscht: Rotation, Additives Zeichnen, Skalierung, BitBlt, Texturzugriffe et cetera Da die Plugins nur um die Basisfunktionalitäten der Grafikschnittstellen Wrapen, könnte man die Plugins theoretisch für eine Hybrid 3D-Engine verwenden Mehr Infos... ...sowie Tutorials und weitere Links... gibt es auf der Website: http://andorra.sourceforge.net/ Dort findet ihr auch Demos, Tutorials und Screenshots... Wenn ihr Fragen, Kritik oder Anregungen habt, dann könnt ihr diese entweder hier oder bei SourceForge posten. Downloads: Momentan gibt es die Version 0.4.5. Einen Überblick über alle Downloads gibt es hier. Das Package mit allen Demos, Prerequisiten und Binaries gibt es in der neusten Version hier: Andorra 2D All-In-One-Package 23MB Tutorials: Die Tutorials gibt es nicht nur auf der Website, sondern auch in der DP. Allerding möchte ich betonen, dass die Tutorials auf meiner Website aktueller sind. Ich kann meine eigenen Tutorials hier nämlich nicht mehr bearbeiten (@Daniel: dringend umändern!). Hier ist eine kleine Liste, wobei die Sterne die Schwierigkeit darstellen: http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngTutorial 1 - Installieren und Initialisieren http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngAndorra 2D über CVS aktualisieren http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngTutorial 2 - Das erste Bild http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngTutorial 3 - Die Spriteengine http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngPartikelsysteme http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngDer Canvas http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngDas GUI-System http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngAndorra 2D und Lazarus http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pngÜber Windowframeworks FAQ: Eine Sammlung oft gefragter Fragen findet sich hier: http://andorra.sourceforge.net/index.php?section=FAQ Wichtig: Falls ihr ein Programm mit Andorra 2D geschrieben habt/daran schreibt, dann wäre es schön wenn ihr mir Bescheid sagen könnt. Dann bekomme ich nämlich mal einen Überblick, wer die Bibliothek nun überhaupt verwendet und außerdem kann ich auf meiner Website Screenshots von eurem Projekt einfügen und auch auf eine eventuelle Website eures Projektes verlinken. Über diesen Thread: Bitte schreibt hier nur Wünsche oder Anregungen herein, die direkt mit der Engine zu tun haben. Wenn ihr eine Frage über die Anwendung in eurer Anwendung habt, dann macht am besten einen eigenen Thread im Multimedia-Teil auf, bei dem ihr "[Andorra 2D]" vor den Titel schreibt. Danke für euer Interesse, 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
|
Delphi 10.2 Tokyo Professional |
#851
Hi,
Grad nur 2 Sachen die mir in den ersten paar Zeilen deiner Übersetzung aufgefallen sind: 1.
Zitat:
we load an image and display it.
Zitat:
Are an image and a texture not the same?
Michael
|
Zitat |
Neutral General |
Öffentliches Profil ansehen |
Mehr Beiträge von Neutral General finden |
FreePascal / Lazarus |
#852
Wie gesagt, es wäre super, wenn ihr den BB-Code anhängen könntet, damit ich davon was habe. Ich kann leider eure Posts nicht editieren und den BB-Code kopieren.
Aber schonmal Danke!
Andreas
|
Zitat |
FreePascal / Lazarus |
#854
Zitat von Matze:
OT: Dann zitiere ihn doch.
Nochmal Danke!
Andreas
|
Zitat |
Turbo Delphi für Win32 |
#855
Ich weiß, ich weiß... zu viel Freizeit...
Zitat:
Andorra 2D GUI
Part 1 - Using the GUI system Introduction http://andorra.sourceforge.net/tutots/guisample.jpg Virtually all professional games do not use the standard components that Windows offers to build up the user interface. The GUI system should be adapted to the game after all - a simulation of the middle ages does certainly not benefit from higgledy-piggledy Windows XP buttons. Also, it is difficult to display the standard components in a hardware-accelerated way. To give you the possibility of creating consistent GUIs which are fully integrated into your game, Andorra 2D provides a fairly powerful and in most cases sufficient GUI system. This can easily be extended with self-made components and is also fully skinnable. Please note: Writing such a GUI system is very time-consuming, which is why its development is currently suspended. If you have created new components on your own or wish to extend the system, please send me an e-mail. Preparations First you have to create a GUI in the supplied GUI editor, which works in a similar way to Delphi. In the process you should save each form as a separate GUI file. (*.axg, Andorra XML GUI) Skins can also be created with the supplied skin editor which, however, is still somewhat complicated at the moment. Anyhow, the supplied skin file "sunna.axs" can be modified to achieve the same result. Apart from that, an Andorra GUI needs a cursor definition file. For this, create an image list with the according cursors with the image list editor and write a simple XML file according to the following example, in which you refer to the individual entries:
Delphi-Quellcode:
<?xml version="1.0" encoding="iso-8859-1"?>
<set> <images source="cursors.ail"/> <cursor name="default" src="default"> <hotspot x="0" y="0"/> </cursor> <cursor name="wait" src="wait"> <hotspot x="6" y="11"/> <anim start="0" stop="7" speed="25"/> </cursor> <cursor name="cross" src="cross"> <hotspot x="8" y="8"/> </cursor> </set> Integration To use the GUI in a programme now, we first need some units: The base frame of all GUI components is located in "AdGUI" as well as the implementation of the cursors and the GUI manager. It is important to include the unit "AdComponents", if you use the supplied components. The reason for this is that with including the unit, the corresponding components are registered in the GUI system. If the file is not included, an error message is displayed because the specified components are not registered and therefore cannot be found. First of all we need an instance of the class "TAdGUI", which takes care of loading, saving, skins and cursors automatically.
Delphi-Quellcode:
Important: Commonly made mistakes
AdGUI := TAdGUI.Create(AdDraw); //Instantiating the class
AdGUI.Skin.LoadFromFile('sunna.axs'); //Loading the skin AdGUI.Cursors.LoadFromFile('cursors.xml'); //Loading the cursor AdGUI.LoadFromFile('gui.axg'); //Loading the GUI - Forgetting the unit "AdComponents" - Forgetting to include a PNG loader (such as AdPNG, AdDevIL or AdFreeImage), because the standard skin "Sunna" uses the format PNG to save the data. Of course, "AdGUI" has to be freed in the end. One only has to call the method AdGUI.Update in the game loop. Technically, these steps should suffice to display the GUI. However, the emphasis lies on "display" - one can hit the mouse button as hard as one likes, nothing happens. Why would it? After all, mouse and keyboard events have to be passed on to the GUI system first. There are two possibilities for doing this. The first one is the easier one which should be enough in most cases. We use the class "TAdGUIConnector" from the unit "AdGUIConnector". This loops the events of the AdDraw parent window system through the GUI system. For this, the following steps are necessary:
Delphi-Quellcode:
The GUI connector should also be freed upon terminating the programme.
AdConnector := TAdGUIConnector.Create(AdGUI); //Creating the GUI connector
AdConnector.ConnectEventHandlers(AdDraw.Window); //Linking it to the parent window system But the GUI connector (still) has a few flaws: One can only link the events to a component of the class "TForm" - if the AdDraw is on a panel, the events have to be passed on manually. However, this method is not that bad and also has another inherent advantage: Imagine a construction game, in which freely movable windows are on the screen. How can the game know if we clicked on the window or on the game field? Not a problem with the manual linking!
Delphi-Quellcode:
At this, the "Click" method of the GUI system is simply called, which recursively calls the click methods of all the other elements. When it is detected that the click was indeed on a control element, the "Click" method returns "true".
procedure Form1Click(Sender:TObject)
var p:TPoint; begin GetCursorPos(p); //Read current cursor position p := ScreenToClient(p); //Convert to form-relative coordinates if not AdGUI.Click(p.X, p.Y) then //Execute event handling begin //The game field was clicked end; end; This works analogously with every other event handler. Accessing control elements Now it would be highly convenient if we could access the elements created in the editor in our programme somehow. In the editor, the elements are assigned a name which is stored in the property "Name" - just like in Delphi. The method "FindComponent" of TAdGUI returns the wanted element when given the corresponding name. To access component-specific properties, we only have to cast the result to the according component class. TAdButton(AdGUI.FindComponent('AdButton1')).Caption := 'Hello!'; Control element events Our GUI system is still fairly inanimate - we do not react to events such as clicks at all yet. For that we can simply link procedures to events such as "OnClick". We have to create a procedure that has exactly the same parameters as the event procedure. These can be found out in the code completion. Please note that the declared procedure has to be part of a class. Example:
Delphi-Quellcode:
By the way, this works the same way in the VCL.
type
TForm1 = class(TForm) [...] private procedure AdButtonClick(Sender:TObject); public [...] end; [...] procedure TForm1.AdButtonClick(Sender:TObject); begin TAdButton(AdGUI.FindComponent('AdButton1')).Caption := 'You clicked me!!'; end; procedure TForm1.FormCreate(Sender:TObject); begin //Initialise Andorra 2D [...] //Load GUI [...] //Assign events TAdButton(AdGUI.FindComponent('AdButton1')).OnClick := AdButtonClick; end; Customised components To create customised components, derive a class from "TAdComponent" and register it in the "initialization" clause of the unit. Along the lines of "Code is worth a thousand words" you best learn how this works by reading the unit "AdComponents". To use your creations in the editor, you have to include the corresponding class there, too. Extend code with a loaded GUI Calling "LoadFromFile" usually replaces the whole GUI - this can be avoided with the following code. Please note that you have to include the unit "AdSimpleXML" additionally.
Delphi-Quellcode:
Conclusion
procedure ExpandGUI(afile: string);
var elems:TAdSimpleXMLElems; xml:TAdSimpleXML; j:integer; cref:TPersistentClass; function SearchFirst(elem:TAdSimpleXMLElem):TAdSimpleXMLElems; var i:integer; begin result := nil; for i := 0 to elem.Items.Count - 1 do begin if elem.Items[i].Name <> 'TAdGUI' then begin result := elem.Items; exit; end else begin result := SearchFirst(elem.Items[i]); if result <> nil then begin exit; end; end; end; end; begin xml := TAdSimpleXML.Create; xml.LoadFromFile(afile); elems := SearchFirst(xml.Root); if elems <> nil then begin for j := 0 to elems.Count - 1 do begin cref := GetClass(elems.Item[j].Name); if cref <> nil then begin with TAdComponent(TAdComponentClass(cref).Create(AdGUI)) do begin LoadFromXML(elems.Item[j]); end; end; end; end; xml.Free; end; This information should help you deal with the GUI system. It is most important to take a look at the properties of the components. Don't be afraid to take a look at the implementation of a component - then emerging questions usually sort themselves out. After all, this is fairly easy in Delphi but also in Lazarus: If you click on an identifier while pressing the CTRL key, you automatically navigate to its declaration. Copyright and licence (c) by Andreas Stöckel November 2007 Translation by 3_of_8 (Manuel Eberl) The content of this tutorial is subject to the GNU Licence for Free Documentation
Manuel Eberl
|
Zitat |
|
#856
Zitat:
Romi, könntest du mir bitte die "Dinge, die dir komisch vorgekommen sind" mitteilen? Ich arbeite immer daran, mein Englisch zu verbessern, und ich dachte zwar, dass ich keine Fehler drinhatte, aber ich kann mich natürlich auch irren.
Zitat:
Weil ich momentan zu viel Freizeit habe (bzw. keine Lust auf das, was ich eigentlich zu tun hätte), hab ich gleich noch das nächste übersetzt:
Hier noch ein paar Vorschläge:
Zitat:
What we need first of all is a so-called "ImageList"
Zitat:
and create in FormCreate.
Zitat:
The Imagelist's function "Add" adds a image
Zitat:
Why does this "TAdImage" now have a sub-object "Texture" again?
What is the property "Texture" of "TAdImage"? An image and a texture are the same, aren't they? The following picture will show you that they're not (at least for Andorra 2D):
Zitat:
The image, the object we just added to the image list, that is, is merely some kind of base frame on which the texture is painted.
Zitat:
The job of the procedure "Restore". When the image list's function "Restore" is being called, it just calls the "restore" function of each image.
Zitat:
However, this method is somewhat laborious when many entries are added to the image list.
Zitat:
Now it only has to be said what this "Restore" does.
Zitat:
When one forgets calling "Restore", an error message is the most likely result.
Zitat:
of the VCL - *.bmp (BItmap), *.dib (Device Independend Bitmap) and *.wmf (Windows Meta File) that is.
Zitat:
These libraries add themselves to a list on initialisation.
Zitat:
For loading the images, other libraries are needed mostly.
So weit war ich. |
Zitat |
Turbo Delphi für Win32 |
#857
Ich hab absichtlich das letzte genommen, weil ich vermutet habe, dass du mit dem nächsten weitermachst.
Und, ja, ich habe verglichen, verstehe aber nicht so ganz, was daran seltsam klingt.
Manuel Eberl
|
Zitat |
|
#858
Zitat von 3_of_8:
Ich hab absichtlich das letzte genommen, weil ich vermutet habe, dass du mit dem nächsten weitermachst.
Und, ja, ich habe verglichen, verstehe aber nicht so ganz, was daran seltsam klingt. Ich mache übrigens gerade das Tutorial zur Spriteengine. Also lass da die Finger von |
Zitat |
Turbo Delphi für Win32 |
#859
Zitat:
What we need first of all is a so-called "ImageList"
First of all we need a so-called "ImageList"
Zitat:
and create in FormCreate.
and is created in FormCreate.
Zitat:
The Imagelist's function "Add" adds a image
an Image
Zitat:
Why does this "TAdImage" now have a sub-object "Texture" again? [Are an image and a texture not the same? As the following picture shows, this is not quite true in Andorra2D...]
Ich finde, den Satz kann man nicht direkt übersetzen. Mein Vorschlag: What is the property "Texture" of "TAdImage"? An image and a texture are the same, aren't they? The following picture will show you that they're not (at least for Andorra 2D):
Zitat:
The image, the object we just added to the image list, that is, is merely some kind of base frame on which the texture is painted.
The image (the object we just added to the image list) is merely some kind of base frame on which the texture is painted.
Zitat:
The job of the procedure "Restore". When the image list's function "Restore" is being called, it just calls the "restore" function of each image.
The assignment of the procedure "Restore". When the image list's function "Restore" is being called, it just calls the "restore" function of each of it's images.
Zitat:
However, this method is somewhat laborious when many entries are added to the image list.
But this method is a bit circumstantial when adding a lot of images to the list.
Zitat:
Now it only has to be said what this "Restore" does.
The last thing to address is what exactly this "restore"-funtcion [sic!] does. Korrektur: The last thing to address is what exactly this "Restore" function does. ("Restore" ist auch im Source großgeschrieben, IIRC, daher auch hier groß, weil Zitat, Bindestrich weg, ansonsten klingt das in der Tat besser als mein Satz)
Zitat:
When one forgets calling "Restore", an error message is the most likely result.
If you forget to call the "restore"-function you will probably end with an error. Korrektur: [...]you will probably end up with an error.
Zitat:
of the VCL - *.bmp (BItmap), *.dib (Device Independend Bitmap) and *.wmf (Windows Meta File) that is.
of the VCL - namely *.bmp (BItmap), *.dib (Device Independend Bitmap) and *.wmf (Windows Meta File).
Zitat:
These libraries add themselves to a list on initialisation.
This libraries will add themselves to a list in the unit AdDraw.
Zitat:
For loading the images, other libraries are needed mostly.
For loading the images, other libraries are needed.
Manuel Eberl
|
Zitat |
Delphi 2009 Professional |
#860
Ich habe mir noch nicht die neueste Version geholt, aber funktioniert es jetzt unter Delphi 2009, dass die Grafiken richtig im ImgEdit angezeigt werden?
Und unter welcher Lizenz steht Andorra 2D und der ImgEdit (ich habe mir daraus das Zeichnen der ListView geholt)? MfG xZise
Fabian
|
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |