![]() |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.15]
Zitat:
Deine Demo läuft jetzt auch bei mir und sieht echt gut aus. Wenn du möchtest füge ich es als Demo hinzu. Igel457 |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.15]
Hi Igel,
danke für die Tipps mit den Prerequisiten. Probiere ich heute abend gleich mal aus. Zitat:
Gruß, Andreas |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.15]
Hi,
inzwischen habe ich die Newton-Engine eingebunden. Die ersten Sprites fallen auch schon zu Boden! Jetzt aber 2 Fragen: 1. Wie bekomme ich jetzt die Gravitation ausgeschaltet (nicht Mass := 0, da ansonsten bei einer Kollision kaum Wirkung erzielt wird) 2. Wie gebe ich den Sprites eine Geschwindigkeit mit (habe schon irgendwas mit ntVector3f oder AdVector2 ausprobiert, funzt aber nicht) Hier der dazugehörige Code:
Delphi-Quellcode:
Gruß, Andreas
unit Main;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,AdDraws, AdClasses, AdSprites,AdPhysics, AdPng; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } public AdDraw1:TAdDraw; {Fläche auf der gemalt wird} AdPerCounter:TPerformanceCounter; {Misst die Zeit von Frame zu Frame} AdSpriteEngine: TSpriteEngine; AdImageList1:TPictureCollection; {Verwaltet die Zeichenobjekte} Slected:TSprite; dx,dy : integer; procedure Idle(Sender:TObject;var Done:boolean); {Wird aufgerufen, wenn Form nichts zu tun hat} procedure UpdatePosition; {Verändert die Positionen der Zeichenobjekte inkl. Rotation} { Public-Deklarationen } end; const AnzObj = 5; {Wieviele Objekte sollen gezeichnet werden} var Form1: TForm1; obj : array[1..AnzObj,1..6] of single; {Verwaltet x,y-Koordinate, Richtung + Geschwindigkeit, Rotationswinkel} objw,objh : Integer; {speichert die Höhe und Breite des geladenen Bitmaps} implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i : integer; begin randomize; {Zufallgenerator neu mischen} AdDraw1 := TAdDraw.Create(self); {Zeichenobjekt wird erzeugt} AdDraw1.DllName := 'AndorraDX93D.dll'; {Verbindung zu DirectX.dll wird hergestellt} AdPerCounter := TPerformanceCounter.Create; {Zeitmesser wird erzeugt} if AdDraw1.Initialize then {wenn das Initialisieren von ADraw1 geklappt hat} begin Application.OnIdle := Idle; {Wenn Form1 nicht zu tun hat, Idle aufrufen} AdImageList1 := TPictureCollection.Create(AdDraw1); {Imagelist erzeugen} AdSpriteEngine := TSpriteEngine.Create(Nil); AdSpriteEngine.Surface := AdDraw1; AdImageList1.Add('Fels').Texture.LoadGraphicFromFile('Stern.png',true,clWhite); {aus Stern.bmp laden, Maske=true, Maskenfarbe = clWhite} AdImageList1.Restore; {Irgenwas internes} objw := AdImageList1.find('Fels').Width; {Breite und Höhe in globalen Variablen speichern} objh := AdImageList1.find('Fels').Height; with TPhysicalApplication.Create(AdSpriteEngine) do begin SolverModel := smLinear; end; for i:= 1 to AnzObj do {erzeugen wir je Zeichenobjekt zufällige Position, Richtungs und Winkelinformationen} begin obj[i,1] := random(form1.Clientwidth); obj[i,2] := random(form1.ClientHeight); obj[i,3] := random(200)-random(200); obj[i,4] := random(200)-random(200); obj[i,5] := random(360); obj[i,6] := random(20)-random(20); With TPhysicalCylinderSprite.Create(AdSpriteEngine) do begin x := obj[i,1]; y := obj[i,2]; Image := AdImageList1.Find('Fels'); Mass := 10; Angle := obj[i,5]; NtVector3f(200,200,0); InitializeShape; end; end; end else begin ShowMessage('Error while initializing Andorra 2D. Try to use another display'+ 'mode or another video adapter.'); halt; end; end; procedure TForm1.FormDestroy(Sender: TObject); begin AdDraw1.Free; AdSpriteEngine.Free; AdPerCounter.Free; AdImageList1.Free; end; procedure TForm1.Idle(Sender: TObject; var Done: boolean); begin if AdDraw1.CanDraw then begin AdPerCounter.Calculate; {wie lange ist seit dem letzten Aufruf vergangen?} Caption := 'FPS:'+inttostr(AdPerCounter.FPS); {FPS in Titelzeile ausgeben} AdDraw1.ClearSurface(clBlack); {Zeichfläche mit Schwarz löschen} AdDraw1.BeginScene; AdSpriteEngine.Move(AdPerCounter.TimeGap / 1000); AdSpriteEngine.Draw; AdSpriteEngine.Dead; AdDraw1.EndScene; AdDraw1.Flip; {gezeichnete Scene darstellen} end; Done := false; end; end. |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.15]
Wenn ich recht informiert bin, arbeitet der Igel bereits an einer integrierten Newton-Engine,sodass dir viel Arbeit erspart bleibt ;)
|
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.15]
Zitat:
die Newton Unit ist Momentan in einem sehr frühen Entwicklungsstadium, weshalb du die von dir oben genannten Punkte nicht ohne weiteres durchführen kannst (d.h. ohne meine Unit zu bearbeiten), was später aber ohne Probleme möglich sein wird. Momentan fokusiere ich meine "Kräfte" aber auf den Canvas und dann 3D oder die GUI. (Wobei ich die GUI praktisch schon, wenn auch für DelphiX, geschrieben habe.) Da sich Nivosta Anfang der Woche (mal wieder) bei mir gemeldet hat, gibt es (hoffentlich) vorraussichtlich bis Ende des Monats auch das OpenGL Plugin und damit die volle Kompatibilität zu Lazarus/Kylix und Linux. Zitat:
Heute komme ich, man sehe auf mein Alter, leider nicht mehr zu so viel... (Ich glaube ich spiele mal noch ein wenig Oblivion) Danke für die Fragen, Igel457 |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.15]
Hallo.
Ich habe mich mal dran gesezt und ein Tutorial zur Spriteengine geschrieben - siehe erster Beitrag. Viel Spaß damit, Igel457 |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.15]
Ich habe den Schritt gewagt und mein Spiel
![]() Framerate ist, bei grafisch aufwändigen Leveln (viele kleine Einzelgrafiken) ca. 50-100x schneller (500-1000 statt ~10 FpS) .. *lob & freu* |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.15]
Juhu, danke.
Da kann ich gleich mal prüfen ob ich bis jetzt alles richtig gemacht habe. :lol: |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.15]
Bisher siehts prima aus ^^
War ja auch der Grund wieso ich es damals noch nicht genutzt hab (vor 3-4 Monaten) .. da wars halt doch noch ein Stückweit mehr in der Entwicklung^^ Eine Frage noch: gibts irgendeine Möglichkeit, Text auf ner adDraw-Oberfläche auszugeben oder muss man sich das selber mittels Buchstaben-Grafiken zusammenbasteln? |
Re: Andorra 2D - The Next Generation 2D Engine [Ver. 0.15]
@Florian H:
Schön, dass ich dich endlich zu Andorra 2D "konvertiert" habe und es dir gefällt. Es gibt das TAdFont Objekt, mit dem du ganz einfach Text ausgeben kannst. Siehe auch hier: ![]() In Version 0.2 gibt es dann auch einen "Canvas", mit dem das noch viel einfacher geht. Noch viel Spaß, Igel457 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:09 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