Avatar billede esben_pape Nybegynder
20. marts 2003 - 14:14 Der er 12 kommentarer og
1 løsning

klasser og uses

Jeg har et problem med en funktion, som jeg gerne vil have ændret lidt i. Jeg anbefaler stærk lige at læse dette spørgsmål jeg stiller her, da det er samme problem, som ikke er løst endnu:
http://www.eksperten.dk/spm/330484

Anyway, jeg har en klasse som hedder TPlayerSprite, som arver fra TImageSprite (i DelphiX). TImageSprite har en funktion kaldet DoDraw, som jeg gerne vil ændre i, så jeg laver en procedure i min TPlayerSprite og overrider, men problemet er, at den siger en fejl ved følgene linje:

procedure TPlayerSprite.DoDraw;
var
  ImageIndex: Integer;
  r: TRect;
begin
  ImageIndex := GetDrawImageIndex; // Undeclared iden.!?
  r := GetDrawRect; // Undeclared iden.!?
  Image.DrawRotate(MainForm.DXDraw.Surface,r.Left,r.Top,Image.Width,Image.Height,0,0.5,0.5,10);
end;

Dette forstår jeg ikke, for jeg HAR tilføjet DXSprite til min uses clause hvori GetDrawRect osv befinder sig... nogen ideer?
Avatar billede kfz Nybegynder
20. marts 2003 - 16:40 #1
kan du ikke skrive dxsprite.GetDrawImageIndex
Avatar billede esben_pape Nybegynder
20. marts 2003 - 17:24 #2
Nej. Prøvede også sådan her:

var
  ImageSprite: TImageSprite;
------
ImageIndex := ImageSprite.GetDrawImageIndex; // Her sagde den Undeclared Indentifier "GetDrawImageIndex"
Avatar billede kfz Nybegynder
20. marts 2003 - 18:08 #3
det er fordi GetDrawImageIndex og GetDrawRect står i timagesprites private sektion

TImageSprite = class(TSprite)
  private
    FAnimCount: Integer;
    FAnimLooped: Boolean;
    FAnimPos: Double;
    FAnimSpeed: Double;
    FAnimStart: Integer;
    FImage: TPictureCollectionItem;
    FPixelCheck: Boolean;
    FTile: Boolean;
    FTransparent: Boolean;
    function GetDrawImageIndex: Integer; //her
    function GetDrawRect: TRect; //og her
  protected
    procedure DoDraw; override;
    procedure DoMove(MoveCount: Integer); override;
    function GetBoundsRect: TRect; override;
    function TestCollision(Sprite: TSprite): Boolean; override;
  public
    constructor Create(AParent: TSprite); override;
    property AnimCount: Integer read FAnimCount write FAnimCount;
    property AnimLooped: Boolean read FAnimLooped write FAnimLooped;
    property AnimPos: Double read FAnimPos write FAnimPos;
    property AnimSpeed: Double read FAnimSpeed write FAnimSpeed;
    property AnimStart: Integer read FAnimStart write FAnimStart;
    property PixelCheck: Boolean read FPixelCheck write FPixelCheck;
    property Image: TPictureCollectionItem read FImage write FImage;
    property Tile: Boolean read FTile write FTile;
  end;
Avatar billede kfz Nybegynder
20. marts 2003 - 18:17 #4
skal ændres til følgende

  TImageSprite = class(TSprite)
  private
    FAnimCount: Integer;
    FAnimLooped: Boolean;
    FAnimPos: Double;
    FAnimSpeed: Double;
    FAnimStart: Integer;
    FImage: TPictureCollectionItem;
    FPixelCheck: Boolean;
    FTile: Boolean;
    FTransparent: Boolean;
  protected
    procedure DoDraw; override;
    procedure DoMove(MoveCount: Integer); override;
    function GetBoundsRect: TRect; override;
    function TestCollision(Sprite: TSprite): Boolean; override;
  public
    constructor Create(AParent: TSprite); override;
    property AnimCount: Integer read FAnimCount write FAnimCount;
    property AnimLooped: Boolean read FAnimLooped write FAnimLooped;
    property AnimPos: Double read FAnimPos write FAnimPos;
    property AnimSpeed: Double read FAnimSpeed write FAnimSpeed;
    property AnimStart: Integer read FAnimStart write FAnimStart;
    property PixelCheck: Boolean read FPixelCheck write FPixelCheck;
    property Image: TPictureCollectionItem read FImage write FImage;
    property Tile: Boolean read FTile write FTile;
    function GetDrawImageIndex: Integer; //flyttes herned
    function GetDrawRect: TRect; //og herned
  end;
Avatar billede esben_pape Nybegynder
20. marts 2003 - 18:17 #5
ahh okaj...kan jeg godt se, jeg mangler dog stadig lige et svar på, hvordan man lettest og smartest løser det.
Avatar billede kfz Nybegynder
20. marts 2003 - 18:17 #6
du kan også flytte dem ind under protected
Avatar billede esben_pape Nybegynder
20. marts 2003 - 18:19 #7
men vil det ikke ødelægge unit'en? Den bruges jo af andre programmer også?
Avatar billede kfz Nybegynder
20. marts 2003 - 18:23 #8
nej, det vil det ikke, du giver bare adgang til nogle funktioner som tidligere var umulige at bruge, det er kun hvis du flytter fra public > protected eller protected > private, at det kan give problemer
Avatar billede kfz Nybegynder
20. marts 2003 - 18:24 #9
hvad kan den komponent du er ved at lave forresten??
Avatar billede esben_pape Nybegynder
20. marts 2003 - 18:31 #10
Jeg sidder og leger lidt med DelphiX, klasser og andet. Laver et lille program med en bil, som kan køres rundt på en form. Bilen skal jo kunne køre i forskellige retninger, og derfor skulle jeg ændre i DoDraw-funktionen, så den også kunne tegne den i en anden vinkel en bare standard. Så jeg har lavet lidt funktioner til bilen, som accelerationsevne, tophastighed, rotationshastighed osv.
Avatar billede esben_pape Nybegynder
20. marts 2003 - 18:32 #11
Havde også lidt problemer med at få bilen til at køre den retning som den nu pegede. Har ikke lært cos og sin endnu, går kun i 9. klasse ;-)

Anyway, tak for svar...

Jeg uploader programmet til nettet om lidt, så kan du jo se mesterværket, hvis du vil :)
Avatar billede kfz Nybegynder
20. marts 2003 - 20:12 #12
ja det vil jeg gerne
går også selv i 9. klasse
Avatar billede esben_pape Nybegynder
21. marts 2003 - 15:51 #13
Okaj: http://www.friserverplads.dk/ICU/SpriteTest.zip

Det er kun ment som en test af DelphiX's spriteengine og klasser osv... videreudvikler måske til et Raptor- eller Comet Busterlignende spil
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester