Einzelnen Beitrag anzeigen

MydroF

Registriert seit: 22. Aug 2009
9 Beiträge
 
#4

Re: Ausgewähltes Sprites zu Mausklick-Koordinaten bewegen?

  Alt 6. Sep 2009, 14:56
Hab versucht den Code umzusetzen, leider wird an verschiedenen Stellen verschiedenes vom Programm nicht akzeptiert=(
Hab das ganze mal in nem neuen Projekt getestet, leider wird der Code eben nicht ausgeführt, und es bewegt sich auch immer noch nichts, von dem, was funktioniert. Habs mal angehangen.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,AdDraws, AdClasses, AdTypes, PNGImage, AdSprites, StdCtrls;

type
  //Eigener Raumschifftyp I
  TFlieger1 = class(TImageSprite)
    private
    FSelected:Boolean;
    FPosition,FDestination:TPoint;
    procedure SetSelection(Value:Boolean);

    public
      XSpeed:integer;
      procedure Update;
      constructor Create(AParent:TSprite);override;
      procedure Move(Destination: TPoint);
      procedure Update;override;
    published
    property Selected: Boolean read FSelected write FSelected;

  end;


  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
  AdImageList:TAdImageList;
  AdDraw:TAdDraw;
  AFlieger1 : Array[0..100] of TFlieger1;
  AdSpriteEngine:TSpriteEngine;
  procedure Idle(Sender:TObject; var Done:boolean);
    { Public declarations }
  end;

var
  Form1: TForm1;
  i:integer;
  Flieger1:TFLieger1;
  TAnzahl : integer = 0;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
AdDraw := TAdDraw.Create(self);
AdDraw.DllName := 'main/AndorraDX93D.dll';

if AdDraw.Initialize then
    begin
        Application.OnIdle := Idle;
        AdImageList := TAdImageList.Create(AdDraw);
        with AdImageList.Add('flieger1') do
        begin
            Texture.LoadGraphicFromFile('anim/flieger1.png',true,clFuchsia);
            PatternWidth := 128;
            PatternHeight := 128;
            end;
        AdImageList.Restore;
        AdSpriteEngine := TSpriteEngine.Create(nil);
        AdSpriteEngine.Surface := AdDraw;
        Randomize;

        end
        else
        begin
        ShowMessage(AdDraw.GetLastError);
        halt; //<-- Schließt die komplette Anwendung
    end;

end;


procedure TForm1.Idle(Sender: TObject; var Done: boolean);
begin
    if AdDraw.CanDraw then //Wenn überhaupt auf das AdDraw gezeichnet werden kann dann...
        begin
        AdDraw.ClearSurface(clBlack); //Füllt die Oberfläche mit schwarzer Farbe

        AdDraw.BeginScene;
         AdSpriteEngine.Draw;
         AdSpriteEngine.Dead;


        AdDraw.EndScene;

        AdDraw.Flip; //Präsentiert die gezeichneten Dinge auf dem Bildschirm.
        end;

    Done := false; // Diese Zeile nicht vergessen, sonst wird der Code nur sporadisch ausgeführt.
end;


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

procedure TForm1.Button1Click(Sender: TObject);
begin
i:=TAnzahl;
AFlieger1[i]:= TFlieger1.Create(AdSpriteEngine);
AFlieger1[i].Image := AdImageList.Find('flieger1');
inc(TAnzahl);
end;


Constructor TFlieger1.Create(AParent:TSprite);
var
i:integer;
begin
i:=TAnzahl;
if i<5 then begin
  inherited;
  X := 100*i;
  Y := 90;
  Z := 0;
  end;
end;

procedure TFlieger1.SetSelection(Value: Boolean);
begin
FSelected:=Value;
end;

procedure TFlieger1.Move(Destination: TPoint);
begin
if Selected then FDestination := Destination;
end;


procedure TFlieger1.Update;
begin
* if (FPosition.X = FDestination.X) and (FPosition.Y = FDestination.Y) then
* begin
* * // Wenn Position erreicht wurde, Selektion entfernen
* * Selected := false;
* end else
* begin
* * // Zum Ziel bewegen
* * // Mit Geschwindigkeit von 1 Pixel pro Frame
* * if FPosition.X > FDestination.X then FPosition.X := FPosition.X - 1 else FPosition.X := FPosition.X + 1;
* * if FPosition.Y > FDestination.Y then FPosition.Y := FPosition.Y - 1 else FPosition.Y := FPosition.Y + 1;
* end;
end;


end.
Angehängte Dateien
Dateityp: rar bewegen_167.rar (1,20 MB, 5x aufgerufen)
  Mit Zitat antworten Zitat