Wie ihr vielleicht schon festgestellt habt, lerne ich gerade, Andorra 2d zu benutzen. Die ersten beiden Tutorials haben auch ganz gut geklappt. Im dritten Teil hänge ich jedoch fest.
Mein Compiler meldet, dass FDraw.RegisterNotifyEvent(Notify) in "AdPixelTest.pas" mit einer falschen Anzahl an Parametern aufgerufen wurde, was ich mir allerdings nicht erklären kann.
Danke im Vorraus für eure Hilfe!
Code: Alles auswählen
unit Unit1;
{$MODE DELPHI}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, AdDraws, AdClasses,
AdTypes,AdSetupDlg,AdComponents,Windows,AdPerformanceCounter,AdSprites;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ private declarations }
public
procedure Idle(Sender: TObject; var Done:boolean);
procedure SetLine;
AdDraw : TAdDraw;
AdImageList : TAdImageList;
AdTimer : TAdPerformanceCounter;
AdSpriteEngine : TSpriteEngine;
{ public declarations }
end;
//Klasse: TFigur
TFigur = class(TImageSprite)
private
protected
procedure DoMove(TimeGap:double);override;
public
XSpeed:integer;
constructor Create(AParent:TSprite);override;
procedure SetLine;
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer; //Schleifenvariable
begin
//Timer:
AdTimer := TAdPerformanceCounter.Create;
//Oberfläche erstellen:
AdDraw := TAdDraw.Create(self);
AdDraw.DllName := 'AndorraOGLLaz.dll';
if AdDraw.Initialize then
begin
Application.OnIdle := Idle;
//AdImageList
AdImageList := TAdImageList.Create(AdDraw);
with AdImageList.Add('Figur') do //Zu der Liste wird ein Bild mit dem Namen "bild" hinzugefügt.
begin
Texture.LoadGraphicFromFile('Bilder/boy.bmp',true,clFuchsia); // Dieses mal laden wir das Bild transparent herein
PatternWidth := 96;
PatternHeight := 96;
end;
AdImageList.Restore;
//Erzeugen der Spriteengine:
AdSpriteEngine := TSpriteEngine.Create(nil);
AdSpriteEngine.Surface := AdDraw;
//Instanzen von TImageSprite erstellen
Randomize;
for i:=1 to 6 do
begin
with TFigur.Create(TAdSpriteEngine) do
begin
Image := AdImageList.Find('Figur');
AnimActive := true;
AnimLoop := true;
XSpeed := -(random(100)+50);
AnimSpeed := Abs(XSpeed / 7.5);
SetLine; //YPosition der Figur setzen und XSpeed umkehren(s.Funktion)
end;
end;
end //wenn AdDraw Initialisierung fehlschlägt:
else
begin
ShowMessage(AdDraw.GetLastError);
halt;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
AdImageList.Free;
AdTimer.Free;
AdDraw.Free;
AdSpriteEngine.Free;
end;
procedure TForm1.Idle(Sender: TObject; var Done:boolean);
begin
//Timer:
AdTimer.Calculate;
Caption := 'FPS:'+inttostr(AdTimer.FPS);
AdDraw.ClearSurface(0);
AdDraw.BeginScene;
//Die Animation:
AdSpriteEngine.Move(AdPerCounter.TimeGap / 1000);
AdSpriteEngine.Draw;
AdSpriteEngine.Dead;
//Ende der Animation
//
AdDraw.EndScene;
AdDraw.Flip;
Done := false;
end;
{TFigur}
constructor TFigur.Create(AParent: TSprite);
begin
inherited;
X := 0;
Y := 0;
XSpeed := -150;
end;
procedure TFigur.DoMove(TimeGap: double);
begin
inherited;
X := X + XSpeed*TimeGap;
if ((X > Engine.SurfaceRect.Right) and (XSpeed > 0)) or
((X < -96) and (XSpeed < 0)) then
begin
SetLine;
end;
end;
procedure TFigur.SetLine;
begin
XSpeed := -XSpeed;
if XSpeed > 0 then
begin
AnimStart := 0;
AnimStop := 7;
X := -96;
end
else
begin
AnimStart := 8;
AnimStop := 15;
X := Engine.SurfaceRect.Right+96;
end;
Y := Random(round(Engine.SurfaceRect.Right-96));
end;
initialization
{$I Unit1.lrs}
end.