![]() |
Andorra verwackelt Bilder
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Ich habe ein Sprite erstellt mit Andorra2D und frage im OnMove die Pfeiltasten ab und bewege das Sprite so. Das Problem ist das das Sprite zwischen zwei Zuständen hin und her hüpft. Obwohl ich keine Animation eingestellt habe und nur ein einziges Bild vorliegt. Im Anhang ist mal ein animiertes GIF bei dem man erkennen kann was passiert. Gruß Neutral General |
Re: Andorra verwackelt Bilder
Ich kann mir nur vorstellen, das dies durch Fließkomma Ungenauigkeiten bei den Texturkoordinaten/der Position zustande kommt. Sonst sehe ich eigentlich kein Problem.
|
Re: Andorra verwackelt Bilder
Hallo,
hat sich da mal was getan? Ich habe das Problem nämlich auch. Und schön ist das nicht grad... Aber ansonsten ein großes Lob für die Engine! |
Re: Andorra verwackelt Bilder
Hi,
Musst versuchen das die Länge/Breite so einzustellen das es eine 2er Potenz ist. Gruß Neutral General |
Re: Andorra verwackelt Bilder
Und wie soll ich das machen? Ich dachte, die Engine streckt das ganze automatisch auf ^2-Größen und schneidet es zu. Meine jedenfalls, so eine Stelle im code gesehen zu haben. Muss man dafür vielleicht eine betsimmte Option aktivieren? Mipmaps vielleicht?
|
Re: Andorra verwackelt Bilder
Hallo,
ich kann mir selbst den Fehler nicht erklären. Und wie schon richtig vermutet wurde, streckt Andorra 2D die Grafiken automatisch zu einer 2^n Größe. Wann genau tritt der Fehler auf? Edit: Ups... |
Re: Andorra verwackelt Bilder
Du meinst wohl eher 2^n.
|
Re: Andorra verwackelt Bilder
Kann es daran liegen, dass ich die Textur sozusagen manuell [edit]reinlade[/edit]? Ich habe nämlich ein eigenes Dateiformat für die Spritelisten, weil ich Zusatzinformationen speichern muss. Daher kann ich die AdImagelist nicht benutzen.
Ich geb dir mal etwas Code, vielleicht kannst du es damit ja reproduzieren oder mir sagen, welche Funktion ich vergessen habe aufzurufen.
Delphi-Quellcode:
Achja, übrigens Danke für den bug in deiner Engine, denn das genauere Betrachten des Codes hatte den Nebeneffekt, dass ich Codeteile gefunden habe, die völlig sinnlos waren (ältere Versuche) und konnte so den Code auf c.a. 1/3 reduzieren, würde ich sagen. xD
procedure TSgMap.LoadSkinsFromFile(const FileName: string);
var i: integer; tmpabmp: tadbitmap; begin // Skinliste laden fskinlist.LoadFromFile(filename); if assigned(fparent) then begin // Temporäres Andorrabitmap erstellen, um die textur zu laden: tmpabmp := tadbitmap.Create; for i := 0 to fSkinlist.Count - 1 do begin if not assigned(fskinlist[i].sprite) then fskinlist[i].Sprite := TAdImage.Create(fParent.adDraw); // fskinlist[i].Image ist ein TBitmap32, das das Sprite enthält (inkl. Alphachannel) Bitmap32IntoAndorraBitmap(fskinlist[i].Image,tmpabmp); fSkinList[i].Sprite.Texture.Texture.LoadFromBitmap(tmpabmp, fParent.adDraw.GetTextureParams(fskinlist[i].Sprite.Texture.BitDepth)); fskinlist[i].Sprite.Restore; end; freeandnil(tmpabmp); end; end; // Code teilweise von Andorra-Units abgeschaut: procedure Bitmap32IntoAndorraBitmap(aBmp32:TBitmap32;aAndorraBmp:TAdBitmap); var x,y:integer; sl1:PColor32; sl2:pRGBARec; begin aAndorraBmp.ReserveMemory(aBmp32.width,aBmp32.height); sl2 := aAndorraBmp.ScanLine; sl1 := @(aBmp32.Bits^[0]); for y := 0 to aBmp32.Height-1 do begin for x := 0 to aBmp32.Width - 1 do begin tcolor32(sl2^) := sl1^; inc(sl2); inc(sl1); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07: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