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:
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;
Wie könnte ich das optimieren ?
und 2. Wenn ich von einem Bild die Bitmaske erstelle
Delphi-Quellcode:
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;
so ist die Bitmaske falsch herum , da bei
opengl der Punkt 0,0 unten links ist und nich oben rechts,
weiß jemand wie ich das so machen könnte das die Bitmaske am ende auf dem Kopf steht ?
edit : vollständige Version hochgeladen