Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Alternative zu sprite von DelphiX? (https://www.delphipraxis.net/54572-alternative-zu-sprite-von-delphix.html)

ferby 6. Okt 2005 17:55


Alternative zu sprite von DelphiX?
 
Hallo,

Ich programmiere gerade an einen Spiel das ca. am Bildschirm 50 verschiedene animierte Grafiken anzeigt. Ich habe versucht alles mit DelphiX und Sprites zu lösen nur leider scheitert es an mehreren dingen wie z.B. eine pixelgenaue kollisionsabfrage wenn teile der grafiken transperent sind, an unerklärlichen fehlermeldungen etc.

Jedenfalls wollte ich fragen ob es eine alternative zu sprites gibt. Früher habe ich immer mit TImage gearbeitet aber die wurden mir abgeraten, was kann ich noch nehmen???


Ferby

Khabarakh 6. Okt 2005 18:14

Re: Alternative zu sprite von DelphiX?
 
Zitat:

Früher habe ich immer mit TImage gearbeitet aber die wurden mir abgeraten
Dann rate ich dir es wieder an *g* . Solange du im zweidimensionalen Raum bleibst, wirst du ziemlich wahrscheinlich keine Hardwarebeschleunigung brauchen. Wichtig ist nur, dass du OffScreenBitmaps benutzt, eine schnelle Grafikbibliothek wie die GR32-Lib kann auch nicht schaden. Wenn du also mit TBitmap und Co. schon vertraut bist, kannst du ruhig dabei bleiben. Ich will dir aber nicht von OpenGL/DirectX abraten, vor allem, weil ich damit (noch) keine Erfahrungen gesammelt habe :wink: .

ferby 6. Okt 2005 18:42

Re: Alternative zu sprite von DelphiX?
 
Hallo,

gibts irgendwo eine einführung mit der GR32-Lib??

Kenn mich mit der nicht aus...

Khabarakh 6. Okt 2005 19:03

Re: Alternative zu sprite von DelphiX?
 
Soweit ich weiß, nein. Das ist vielleicht eine Schwäche der Lib, aber TBitmap und TBitmap32 haben im Groben und Ganzen viele Gemeinsamkeiten, sodass der Umstieg von VCL zu GR32 nicht so schwer fallen sollte. Wichtig ist natürlich, die Hilfe zu lesen (z.B. "Using TImage32"). Und wenn du trotzdem Fragen hast: Einfach fragen :wink: .

ferby 6. Okt 2005 19:16

Re: Alternative zu sprite von DelphiX?
 
Hallo,

Ja ich habe eine Frage,

kannst du mir ein Programm schreiben das einfach per Tastendruck (Pfeiltasten) eine grafik nach rechts,links,oben und unten bewegt??

Ich lerne so am schnellsten.

Ich habe mir das Besipielprogramm für sprites angeschaut nur werde ich nicht ganz schlau daraus....
kann das jemand ein wenig erklären was in jeder zeile passiert?

Delphi-Quellcode:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  GR32, GR32_Transforms, StdCtrls, AppEvnts, GR32_Image, GR32_Layers;

type
  TForm1 = class(TForm)
    Image32: TImage32;
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    BitmapList: TBitmap32List;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  public
    Velocities: TArrayOfFloatPoint;
    procedure IdleHandler(Sender: TObject; var Done: Boolean);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  X: Integer;
  ALayer: TBitmapLayer;
  L: TFloatRect;
  I: Integer;
begin
  Image32.BeginUpdate;
  for X := 0 to 49 do
  begin
    // create a new layer...
    ALayer := TBitmapLayer.Create(Image32.Layers);
    with ALayer do
    begin
      Bitmap := BitmapList.Bitmaps[Random(BitmapList.Bitmaps.Count)].Bitmap;
      Bitmap.DrawMode := dmBlend;
      Bitmap.MasterAlpha := Random(255);

      // put it somethere
      L.Left := Random(Image32.Width);
      L.Top := Random(Image32.Height);
      L.Right := L.Left + Bitmap.Width;
      L.Bottom := L.Top + Bitmap.Height;
      ALayer.Location := L;

      I := Length(Velocities);
      SetLength(Velocities, I + 1);
      Velocities[I] := FloatPoint(Random - 0.5, Random - 0.5);
    end;
  end;
  Image32.EndUpdate;
  Image32.Changed;
  Edit1.Text := IntToStr(Image32.Layers.Count) + ' layers';
end;

procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
var
  I: Integer;
  R: TFloatRect;
begin
  if Image32.Layers.Count = 0 then Exit;
  Image32.BeginUpdate;
  for I := 0 to Image32.Layers.Count - 1 do
  begin
    with TBitmapLayer(Image32.Layers[I]) do
    begin
      Bitmap.MasterAlpha := (Bitmap.MasterAlpha + 1) mod 256;
      R := Location;
      with Velocities[I] do
      begin
        OffsetRectF(R, X, Y);
        X := X + (Random - 0.5) * 0.1;
        Y := Y + (Random - 0.5) * 0.1;
        if (R.Left < 0) and (X < 0) then X := 1;
        if (R.Top < 0) and (Y < 0) then Y := 1;
        if (R.Right > Image32.Width) and (X > 0) then X := -1;
        if (R.Bottom > Image32.Height) and (Y > 0) then Y := -1;
      end;
      Location := R;
    end;
  end;
  Image32.EndUpdate;
  Image32.Invalidate;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Image32.Layers.Clear;
  Velocities := nil;
  Edit1.Text := '0 layers';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := IdleHandler;
end;

end.

ferby 6. Okt 2005 19:58

Re: Alternative zu sprite von DelphiX?
 
Hallo,

ok ich habe mich jetzt eine weile herumgespielt und kenn mich jetzt mehr oder weniger aus.

Zwei Fragen hab ich noch:

1) Mit

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  Image32.Layers.Clear;
  Velocities := nil;
end;
Werden alle grafiken wieder gelöscht, aber was muss ich machen wenn ich nur einzelne löschen will???

2) Gibt es eine einfache Möglichkeit animierte Grafiken zu zeichnen?


Ferby

dizzy 7. Okt 2005 05:35

Re: Alternative zu sprite von DelphiX?
 
Zitat:

Zitat von ferby
[...] was muss ich machen wenn ich nur einzelne löschen will???

Ein schneller Blick in die Hilfe zur G32 fördert nach sagenhaften 4 Clicks dies zu Tage :zwinker::
Delphi-Quellcode:
  Image32.Layers.Delete(LayerIndex);
Zitat:

Zitat von ferby
2) Gibt es eine einfache Möglichkeit animierte Grafiken zu zeichnen?

Das heisst du möchtest eines (oder manche) Layer mit einer Animation belegen?
In dem Fall würde ich mir eine Referenz auf diese entsprechenden Layer behalten, und jedes neue Frame das darin befindliche Bitmap austauschen. Diese wiederum würde ich in einem "array of TBitmap32" buffern. Das heisst, du musst zumindest selbst animieren.

Khabarakh 7. Okt 2005 12:51

Re: Alternative zu sprite von DelphiX?
 
Zitat:

2) Gibt es eine einfache Möglichkeit animierte Grafiken zu zeichnen?
Das klingt eigentlich gut: news://news.graphics32.org:119/d9ngm...remobjects.com (falls es nicht funktioniert: news://news.graphics32.org -> g.General -> "[ANN] Animators for G32"). Allerdings gibt es die Dateien auf dem Server nicht mehr :stupid: . Am Besten fragst du mal den Autor danach (würde mich persönlich auch interessieren).

ferby 8. Okt 2005 06:18

Re: Alternative zu sprite von DelphiX?
 
Hallo,

danke,
werde mir eure Vorschläge mal ansehen.

Zitat:

Ein schneller Blick in die Hilfe zur G32 fördert nach sagenhaften 4 Clicks dies zu Tage Zwinkern:
Wo find ich die Hilfe?



MfG.
Ferby

dizzy 8. Okt 2005 06:45

Re: Alternative zu sprite von DelphiX?
 
Zitat:

Zitat von ferby
Wo find ich die Hilfe?

In dem Ordner in den du die GR32 entpackt hast evtl. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 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