![]() |
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 |
Re: Alternative zu sprite von DelphiX?
Zitat:
![]() |
Re: Alternative zu sprite von DelphiX?
Hallo,
gibts irgendwo eine einführung mit der GR32-Lib?? Kenn mich mit der nicht aus... |
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: .
|
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. |
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:
Werden alle grafiken wieder gelöscht, aber was muss ich machen wenn ich nur einzelne löschen will???
procedure TForm1.Button2Click(Sender: TObject);
begin Image32.Layers.Clear; Velocities := nil; end; 2) Gibt es eine einfache Möglichkeit animierte Grafiken zu zeichnen? Ferby |
Re: Alternative zu sprite von DelphiX?
Zitat:
Delphi-Quellcode:
Image32.Layers.Delete(LayerIndex);
Zitat:
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. |
Re: Alternative zu sprite von DelphiX?
Zitat:
![]() ![]() |
Re: Alternative zu sprite von DelphiX?
Hallo,
danke, werde mir eure Vorschläge mal ansehen. Zitat:
MfG. Ferby |
Re: Alternative zu sprite von DelphiX?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz