Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 2 Objekte mit verschiedenen Eigenschaften (https://www.delphipraxis.net/25680-2-objekte-mit-verschiedenen-eigenschaften.html)

Spurius 10. Jul 2004 12:14


2 Objekte mit verschiedenen Eigenschaften
 
Hallo,
ich hab in folgendem Code die Klasse TCar. Ich will davon Car und Car2 als Instanzen? haben.
Wenn ich jedoch z.B. Car2 im FormCreate Ereignis ein Bild zuweise, dann hat Car dasselbe Bild.
Wie kann ich das umgehen?
Delphi-Quellcode:
TCar=Class(TImageSprite)
  public
   MunitionMG: Integer;
   Ausrichtung: Byte;
   Constructor Create(AParent: TSprite); Override; // Um die Klasse geht es
   procedure DoMove(MoveCount: Integer); Override;
   procedure Schiessen;
 end;
 TMG=Class(TImageSprite)
  public
   Ausrichtung: Integer;
   Constructor Create(AParent: TSprite); Override;
   Procedure DOMove(MoveCount: Integer); Override;
 end;

var
  Form1: TForm1;
  Car, Car2: TCar;       // Car und Car2
  Fire: Integer;

implementation

{$R *.dfm}
Constructor TCar.Create(AParent: TSprite);
begin
 inherited;
  Image := Form1.DXImageList1.Items.Find('Car');    
  Width := Image.Width;
  Height := Image.Height;
  MunitionMG := 10;
  Ausrichtung := 1;
  X := 10;
  Y := 10;
end;

procedure TCar.DoMove(MoveCount: Integer);
begin
 inherited;
  If isUp in Form1.DXInput1.States then begin
   Car.Ausrichtung := 1;
   Car.Y := Car.Y - 3;
  end;
  If isRight in Form1.DXInput1.States then begin
   Car.Ausrichtung := 2;
   Car.X := Car.X + 3;
  end;
  If isDown in Form1.DXInput1.States then begin
   Car.Ausrichtung := 3;
   Car.Y := Car.Y + 3;
  end;
  If isLeft in Form1.DXInput1.States then begin
   Car.Ausrichtung := 4;
   Car.X := Car.X - 3;
  end;
end;

procedure TCar.Schiessen;
begin
  with TMg.Create(Form1.DXSpriteEngine1.Engine) do begin
  Ausrichtung := Car.Ausrichtung;
  X := Self.X;
  Y := Self.Y;
 end;
end;

//-----TCar------------

Constructor TMg.Create(AParent: TSprite);
begin
 inherited Create(AParent);
 Image := Form1.DXImageList1.Items.Find('Mg');
 Width := Image.Width;
 Height := Image.Height;
end;

procedure TMg.DOMove(MoveCount: Integer);
begin
 inherited;
  case Ausrichtung of
   1: Y := Y - 8;
   2: X := X + 8;
   3: Y := Y + 8;
   4: X := X - 8;
  end;
end;
procedure TForm1.FormCreate(Sender: TObject); //In dem Eieignis will ich Car2 ein anderes
begin
 Form1.DoubleBuffered := True;             //Bild zuweisen, Car soll sein altes Bild behalten
 Form1.DXDraw1.DoubleBuffered := True;
 Car := TCar.Create(DXSpriteEngine1.Engine);
 Car2 := TCar.Create(DXSpriteEngine1.Engine);

 Fire := 1;


end;
Gruß
Spurius

BKempf 10. Jul 2004 12:25

Re: 2 Objekte mit verschiedenen Eigenschaften
 
Koennte es daran liegen?
Delphi-Quellcode:
Image := Form1.DXImageList1.Items.Find('Car');
Ich wuerde vielleicht eine weitere Methode erstellen, die
Delphi-Quellcode:
Image := Form1.DXImageList1.Items.Find('Car2');
enthaelt.

Spurius 10. Jul 2004 12:33

Re: 2 Objekte mit verschiedenen Eigenschaften
 
Car ist nur die Bezeichnung für ein Bild in einer ImageList.

BKempf 10. Jul 2004 12:40

Re: 2 Objekte mit verschiedenen Eigenschaften
 
Zitat:

Zitat von Spurius
Car ist nur die Bezeichnung für ein Bild in einer ImageList.

Im Konstruktor wird das Bild aber beiden neu erzeugten Objekten zugewiesen.
Du musst also den Konstruktor aendern (weiterer Parameter, z.B. Referenz auf das Bild oder ein Aufzaehlungstyp) oder eins der Bilder nachtraeglich ersetzen, z.B.
Delphi-Quellcode:
Car2.Image:=Form1.DXImageList1.Items.Find('Car2');

Spurius 10. Jul 2004 13:29

Re: 2 Objekte mit verschiedenen Eigenschaften
 
Das habe ich schon probiert
Code:
Car2.Image:=Form1.DXImageList1.Items.Find('test');
Aber da bekommt dann Car dasselbe Bild.

Spurius 10. Jul 2004 15:33

Re: 2 Objekte mit verschiedenen Eigenschaften
 
Geht jetzt. Hier der Code wens interessiert:
Delphi-Quellcode:
Form1.DoubleBuffered := True;
 Form1.DXDraw1.DoubleBuffered := True;
 Car := TCar.Create(DXSpriteEngine1.Engine);
 Car2 := TCar.Create(DXSpriteEngine1.Engine);
 Car2.Image := DXImageList1.Items.Find('test');
 Car2.Width := 50;
 Car2.Height := 50;
 Car2.X := 50;
 Car2.Y := 50;
Gruß
Spurius


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