Thema: Delphi Spriteengine

Einzelnen Beitrag anzeigen

Benutzerbild von braingrenade
braingrenade

Registriert seit: 30. Okt 2002
Ort: Neufra
274 Beiträge
 
Delphi 6 Personal
 
#1

Spriteengine

  Alt 31. Okt 2003, 19:46
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
Angehängte Dateien
Dateityp: zip sprite_131.zip (399,8 KB, 20x aufgerufen)
Let the sun beat down upon my face
Stars fill my dream
I am a traveller of both time and space
To be where I have been ________________ Such A Surge
  Mit Zitat antworten Zitat