Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [Andorra2D] TSprite.Image mit eigenem Bitmap (https://www.delphipraxis.net/170614-%5Bandorra2d%5D-tsprite-image-mit-eigenem-bitmap.html)

nuclearping 25. Sep 2012 21:26

[Andorra2D] TSprite.Image mit eigenem Bitmap
 
Hallo! :)

Ich probiere hier schon seit gut 'ner Stunde rum, in einem per Event erzeugten Sprite ein eigenes Bitmap zuzuweisen, was aber überhaupt nicht klappen will ... :?

Delphi-Quellcode:
Z := FAttachedSprite.Z + 1;
FTargetX := AX;
FTargetY := AY;
FSpeed := ASpeed;
W := Round(Abs(FTargetX - X));
H := Round(Abs(FTargetY - Y));
Bmp := TBitmap.Create;
try
  Bmp.PixelFormat := pf32Bit;
  Bmp.Width := W;
  Bmp.Height := H;
  with Bmp.Canvas do
    begin
      Brush.Color := clYellow;
      FillRect(ClipRect);
      Pen.Color := clBlue;
      Pen.Width := 4;

      if FTargetX < X then
        begin
          StartX := Bmp.Width;
          EndX := 0;
        end
      else
        begin
          StartX := 0;
          EndX := Bmp.Width;
        end;
     
      if FTargetY < Y then
        begin
          StartY := Bmp.Height;
          EndY := 0;
        end
      else
        begin
          StartY := 0;
          EndY := Bmp.Height;
        end;

      MoveTo(StartX, StartY);
      LineTo(EndX, EndY);
    end;

  // Alternativ Bmp mit irgendeinem Bild laden
  // Bmp.LoadFromFile('C:\Temp\Test1.bmp');

  TempSprite := TAnimationSprite.Create(Parent, FDraw);
  TempSprite.X := X;
  TempSprite.Y := Y;
  TempSprite.Z := Z;
  TempSprite.Image := TAdImage.Create(FDraw);
  TempSprite.Image.Texture.LoadFromGraphic(Bmp);
  TempSprite.Image.Restore; // geht nicht
Ich sehe aber nichts auf der Spielfläche.

Weise ich dagegen TempSprite.Image irgendein Image aus der globalen ImageList zu, funktionierts und das Sprite wird auf der Spielfläche gezeichnet.
Delphi-Quellcode:
  TempSprite := TAnimationSprite.Create(Parent, FDraw);
  TempSprite.X := X;
  TempSprite.Y := Y;
  TempSprite.Z := Z;
  TempSprite.Image := FImageList[0]; // geht
Warum? Ich vermute, ich habe irgendwas bei der Initialisierung vergessen oder falsch gemacht. Ich kann aber nichts erkennen, vorallem weil's in der DynTexture-Demo ja auch so gemacht wird. :gruebel:

Bummi 25. Sep 2012 21:48

AW: [Andorra2D] TSprite.Image mit eigenem Bitmap
 
Ich kenne Andorra (noch) nicht, könnte dieser Link helfen ?
http://andorra.sourceforge.net/index...l?bb=tutot2ger

nuclearping 25. Sep 2012 22:09

AW: [Andorra2D] TSprite.Image mit eigenem Bitmap
 
Danke für den Wink mit dem Zaunspfahl. ;) Hat nicht direkt geholfen, aber ich hab mal testweise versucht, meiner ImageList dynamisch ein Bild anzuhängen:
Delphi-Quellcode:
Bmp.SaveToFile('C:\Temp\TestBitmap.bmp');
with FImageList.Add('TestBitmap') do
  begin
    Texture.LoadGraphicFromFile('C:\Temp\TestBitmap.bmp', FALSE, clNone);
    Restore;
  end;
I := FImageList.Count - 1;

TempSprite := TAnimationSprite.Create(Parent, FDraw);
TempSprite.X := X;
TempSprite.Y := Y;
TempSprite.Z := Z;
TempSprite.Image := FImageList[I]
Und das funktioniert wieder.

Hab dann mal tiefer gesucht und mir die Funktionen angeschaut. Dabei festgestellt, dass in TAdImage.Texture.LoadGraphicFromFile die Textur über einen Umweg per TAdBmp -> TAdImage.Texture.Texture.LoadFromBitmap(TAdBmp) geladen wird. Dann das mal bei mir ausprobiert und es geht auch ... Keine Ahnung, wieso und warum das vorher nicht geklappt hat, wenn's auch die DynTexture-Demo genauso macht. :gruebel:

Delphi-Quellcode:
AdImage := TAdImage.Create(FDraw);
AdBmp := TAdBitmap.Create;
try
  AdBmp.Assign(Bmp);
  AdImage.Texture.Texture.LoadFromBitmap(AdBmp, ad32Bit);
  AdImage.Restore;
finally
  FreeAndNil(AdBmp);
end;

TempSprite := TAnimationSprite.Create(Parent, FDraw);
TempSprite.X := X;
TempSprite.Y := Y;
TempSprite.Z := Z;
TempSprite.Image := AdImage;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz