AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [Andorra2D] TSprite.Image mit eigenem Bitmap
Thema durchsuchen
Ansicht
Themen-Optionen

[Andorra2D] TSprite.Image mit eigenem Bitmap

Ein Thema von nuclearping · begonnen am 25. Sep 2012 · letzter Beitrag vom 25. Sep 2012
Antwort Antwort
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

[Andorra2D] TSprite.Image mit eigenem Bitmap

  Alt 25. Sep 2012, 21:26
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: [Andorra2D] TSprite.Image mit eigenem Bitmap

  Alt 25. Sep 2012, 21:48
Ich kenne Andorra (noch) nicht, könnte dieser Link helfen ?
http://andorra.sourceforge.net/index...l?bb=tutot2ger
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: [Andorra2D] TSprite.Image mit eigenem Bitmap

  Alt 25. Sep 2012, 22:09
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.

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;

Geändert von nuclearping (25. Sep 2012 um 22:13 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:59 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