![]() |
Spriteengine
Liste der Anhänge anzeigen (Anzahl: 1)
Moin Leute!
Bin grad mit dem programmiren einer kleinen Sprite-engine fertig geworden(siehe Ahnhang). Nun habe ich aber festgestellt das es zwei Probeleme gibt : 1. die kollision ist zu langsam:
Delphi-Quellcode:
Wie könnte ich das optimieren ?
function Tbitmask.collide(bitm:tbitmask): Tbmresarr;
var i,i2,i3,i4 : integer; begin for i := 0 to high(bm) do for i2 := 0 to high(bm[0]) do for i3 := 0 to high(bitm.bm) do for i4 := 0 to high(bitm.bm[0]) do if (bm[i,i2].x+x^ = bitm.bm[i3,i4].x + bitm.x^) and (bm[i,i2].y+y^ = bitm.bm[i3,i4].y + bitm.y^) then if (bm[i,i2].bit = true) and (bitm.bm[i3,i4].bit = true) then begin setlength(result[0],high(result[0])+2); result[0,high(result[0])].x := i; result[0,high(result[0])].y := i2; setlength(result[1],high(result[1])+2); result[1,high(result[1])].x := i3; result[1,high(result[1])].y := i4; end; end; und 2. Wenn ich von einem Bild die Bitmaske erstelle
Delphi-Quellcode:
so ist die Bitmaske falsch herum , da bei opengl der Punkt 0,0 unten links ist und nich oben rechts,
procedure Tbitmask.makebm(bmppath : string;transparentcolor : Tcolor);
var i,i2 : integer; bmp : Tbitmap; begin bmp := Tbitmap.Create; bmp.LoadFromFile(bmppath); setlength(bm,bmp.Width,bmp.Height); for i := 0 to bmp.Width-1 do for i2 := 0 to bmp.Height-1 do if bmp.Canvas.Pixels[i,i2] = transparentcolor then begin bm[i,i2].x := i; bm[i,i2].y := i2; bm[i,i2].bit := false; end else begin bm[i,i2].x := i; bm[i,i2].y := i2; bm[i,i2].bit := true; end; end; weiß jemand wie ich das so machen könnte das die Bitmaske am ende auf dem Kopf steht ? edit : vollständige Version hochgeladen |
Re: Spriteengine
Irgendwas mache ich falsch, ich kann das Projekt im Anhang nicht öffen, da fehlt die Hälfte glaube ich. ;)
|
Re: Spriteengine
:shock: Ich hab's iregendwie geschaft die unit1.pas in nem anderen Ordner zu speicher als die projekt datei ! :mrgreen:
|
Re: Spriteengine
Und jetzt noch die Datei aus dem vielsagenden Ordern mit dem Namen "shit" bitte ;) :) :D
|
Re: Spriteengine
Liste der Anhänge anzeigen (Anzahl: 1)
:mrgreen:
hatte ich vergessen ! ist aber nicht nötig da zwei besondere Dateien zu nehmen , es reicht wenn man den pfad von zwei bitmaps angibt die man halt grad auf seiner platte hat , aber hab den ordner trotzdem mal angehängt (nicht lachen , ich weiß das ich nicht malen kann 8)) edit : Wenns geth sollten die bmp's nene weißen hintergrund haben. |
Re: Spriteengine
Wie mache ich das weg, dass das Prog die Bitmask.dcu nicht auf C:\Eigene Dateien... ablegen will?
|
Re: Spriteengine
Kuck mal in delphi oben in der Leiste Projekt -> optionen -> Verzeichnisse/Bedingungen
Da kann man den Pfad umstellen , das nächstemal denk ich selber dran :oops: |
Re: Spriteengine
Danke, jetzt kann ich's kompilieren. Erst muss ich mal die Zugriffsverletzungen wegbekommen ;)
|
Re: Spriteengine
:shock: Zugriffsverletzung?
|
Re: Spriteengine
Liste der Anhänge anzeigen (Anzahl: 1)
Ok , problem 1 ist beseitigt und das ganze läuft jetzt auch wunderbar flüssig!
(die neue Version hab ich geuploaded) Aber weiterihn weiß ich nicht wie ich das zweite Problem lösen könnte ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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