Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Fehler AdDraw := TAdDraw.Create(self) (https://www.delphipraxis.net/163212-fehler-addraw-%3D-taddraw-create-self.html)

rABInsonCrusoe 19. Sep 2011 23:03

Fehler AdDraw := TAdDraw.Create(self)
 
Hey,

nach der langweiligen Schulinformatik habe ich mich mal an die Grafikprogrammierung gewagt, Andorra2d schien mir recht Einsteiger freundlich. Ich habe mich soweit erfolgreich durch die ersten beiden Andorra Tuts gearbeitet, bei dritten ist jedoch ein Fehler aufgetreten. Mir mangelt es noch an Erfahrung mit der Engine um den Fehler effektiv selbst zu bestimmen, vielleicht könnte ihr mir helfen :) Hier der Quelltext und der Fehler:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,AdSprites, AdSetupDlg, AdPerformanceCounter, AdDraws, AdClasses, AdTypes, AdComponents,
  ExtCtrls;
type
     TFigur = class(TImageSprite)
       private
       protected
         procedure DoMove(TimeGap:double);override;
       public
         XSpeed:integer;
         constructor Create(AParent:TSprite);override;
         procedure SetLine;
     end;

   
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    AdDraw:TAdDraw;
    AdPerCounter:TAdPerformanceCounter;
    AdImageList1:TAdImageList;
    AdSpriteEngine:TSpriteEngine;
    procedure Idle(Sender:TObject;var Done:boolean);
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

const
     path = './resources/';

implementation
{$R *.dfm}

constructor TFigur.Create(AParent:TSprite);
begin
inherited;
     X := 0;
     Y := 0;
     XSpeed := -150;
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;

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 TForm1.FormCreate(Sender: TObject);
var
i:integer;
AdSetupDlg:TAdSetup;
begin
  adpercounter:=TAdperformancecounter.create;
  AdDraw:=TAdDraw.Create(self);                      // HIER TRITT DER FEHLER AUF
  AdSetupDlg := TAdSetup.Create(AdDraw);
  AdSetupDlg.Image := 'boy.bmp';
  if AdSetupDlg.Execute then   
    begin
      if addraw.Initialize then
        begin
          application.OnIdle:=idle;
          adimagelist1.Create(addraw);
          with adimagelist1.Add('figur') do
            begin
              texture.LoadGraphicFromFile(path+'boy.bmp',true,clFuchsia);
              patternwidth:=96;
              patternheight:=96;
            end;
          adimagelist1.Restore;
          adspriteengine:=Tspriteengine.Create(nil);
          adspriteengine.Surface:=addraw;
          randomize;
          for i := 0 to 5 do
            begin
              with TFigur.Create(adspriteengine) do
                begin
                  image:=adimagelist1.find('figur');
                  animactive:=true;
                  animloop:=true;
                  xspeed:=-(random(100)+50);
                  AnimSpeed := Abs(XSpeed / 7.5);
                  SetLine;
                end;
            end;
            end
          else
            begin
              showmessage(addraw.GetLastError);
              halt;
            end;
            end;
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
     AdSpriteEngine.Free;
     AdImageList1.Free;
     AdPerCounter.Free;
     AdDraw.Free
end;

procedure TForm1.Idle(Sender:TObject;var Done:boolean);
begin
if addraw.CanDraw then
  begin
    adpercounter.Calculate;
    addraw.ClearSurface(clblack);
    addraw.BeginScene;
    adspriteengine.Move(adpercounter.TimeGap/1000);
    adspriteengine.draw;
    adspriteengine.Dead;
    addraw.EndScene;
    addraw.flip;
    done:=false;
  end;
end;
Jetzt noch schnell zum Fehler, Ihr seht ja oben wo es hängt. Wenn ich das Programm also ausführen will, erzählt er mir etwas von einer einfachen Zugriffsverletzung. In der TAdDraw Unit sieht man dann das es an der Zeile
Delphi-Quellcode:
FParent := AAdDraw;
liegt, wobei ich nicht weis was dieser Befehl bewirkt.

Vielen Dank im Vorraus für Eure Bemühungen und Hilfe, ich kanns wirklich gebrauchen :)

rABInsonCrusoe 19. Sep 2011 23:19

AW: Fehler AdDraw := TAdDraw.Create(self)
 
Steinigt mich nicht, hab den Fehler gefunden. War eher trivial :D
Meine Zeile:

Delphi-Quellcode:
adimagelist1.Create(addraw);
.
.
Wie es richtig aussehen müsste:

Delphi-Quellcode:
adimagelist1:=tadimagelist.Create(addraw);


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