Błąd Access Violation w klasie komponentu

2011-04-02 19:51
0

Napisałem sobie komponent, ale nie chce działać. Niby wszystko dobrze ale wywala Access Violation...
user image ...przy próbie odwołania się do wartości która jest w klasie, która to klasa z kolei jest w tej pierwszej klasie. To ma być komponent do takiej mini gierki. Jak wszystko bylo na formie, a TShape robił za playera, wszystko działało. Aż w końcu zapragnąłem mieć 2 palyerów, i napisałem komponent który teraz nie działa.
Błąd, jak już wyżej napisałem pojawia się tylko wtedy gdy próbuję zmienić jedną z poniższych wartości:
FKey.Up, FKey.Down, FKey.Left, FKey.Right, FKey.Gas, FKey.Nitro,
FKeyL.Up, FKeyL.Down, FKeyL.Left, FKeyL.Right, FKeyL.Gas, FKeyL.Nitro,

unit player;

interface

uses
  SysUtils, Classes, Controls;

type
  TKeyPushed = class(TPersistent)
    private
      FUp, FDown, FLeft, FRight, FGas, FNitro : Boolean;
    published
      property Up    : Boolean read FUp    write FUp    stored False;
      property Down  : Boolean read FDown  write FDown  stored False;
      property Left  : Boolean read FLeft  write FLeft  stored False;
      property Right : Boolean read FRight write FRight stored False;
      property Gas   : Boolean read FGas   write FGas   stored False;
      property Nitro : Boolean read FNitro write FNitro stored False;
    end;

type
  TPlayer = class(TCustomControl)
  private
    FSpeed     : Extended;
    FForce     : Extended;
    FMSpeed    : Extended;
    FKey       : TKeyPushed;
    FKeyL      : TKeyPushed;
  protected
    { Protected declarations }
  public
    constructor Create(AOwner : TComponent);
    destructor Destroy(); override;
  published
    property Key       : TKeyPushed read FKey       write FKey;
    property KeyL      : TKeyPushed read FKeyL      write FKeyL;
    property Speed     : Extended   read FSpeed     write FSpeed;
    property Force     : Extended   read FForce     write FForce;
    property MaxSpeed  : Extended   read FMSpeed    write FMSpeed;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TPlayer]);
end;

constructor TPlayer.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FKey := TKeyPushed.Create;
  FKeyL := TKeyPushed.Create;
end;

destructor TPlayer.Destroy();
begin
  FKey.Free; // zwolnienie
  FKeyL.Free;
  inherited;
end;

end.

edytowany 3x, ostatnio: TomRiddle, 2011-04-02 20:33
I oczywiście masz świadomość, że wątki z tematami w stylu "mam problem..." trafiają do kosza? Zmień temat... - madmike 2011-04-02 20:27
Próbuj dalej, jesteś tu już tak długo, że powinieneś się już nauczyć pisać sensowne tematy. - madmike 2011-04-02 20:31
Teraz może być? - TomRiddle 2011-04-02 20:33

Pozostało 580 znaków

2011-04-02 20:01
0
  property Key       : TKeyPushed read FKey;
    property KeyL      : TKeyPushed read FKeyL;

i oczywiście masz świadomość, że istnieje coś takiego jak debugger


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
Mam, gdyż wiele razy słyszałem na forum, aczkolwiek nie wiem co to. Debugger? Odrobaczkowywacz? - TomRiddle 2011-04-02 20:04
Rozwiązałem problem. Nie dodałem override; po TPlayer.Create; - TomRiddle 2011-04-03 09:17

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0