PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum zeichnet er die Bälle nicht?


Dennis-X
04.09.2002, 18:39
Hi

Also, ahbe eben ein Programm geschrieben, das Bälle simulieren soll.
Leider zeichnet er die noch nicht mal...Kann mir wer sagen warum?


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, QuickRpt, QRCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

type
TBall = class
x,y,vx,vy,r: integer;
procedure Init(xn,yn,vxn,vyn,rn: integer);
procedure zeigen;
procedure bewegen;
end;


var
Form1: TForm1;
ball1,ball2,ball3 : TBall;

implementation

{$R *.dfm}

procedure tBall.Init(xn,yn,vxn,vyn,rn: integer);
begin
x := xn;
y := yn;
vx := vxn;
vy := vyn;
r := rn;
end;

procedure tBall.zeigen;
begin
Form1.Image1.Canvas.Ellipse(x-r,x+r,y-r,x+r);
end;

procedure tBall.bewegen;
begin
if x > Form1.Image1.Width-r then vx := -vx;
if x < 0+r then vx := -vx;
if y > Form1.Image1.Height-r then vy := -vy;
if y < 0+r then vy := -vy;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Image1.Canvas.Pen.Mode := pmNOTXOR;
Form1.Image1.Canvas.Brush.Style := bsSolid;
image1.Canvas.Brush.Color := clred;
image1.Canvas.pen.Color := clblack;
DoubleBuffered := true;
Ball1.Init(random(Form1.Image1.Width),random(Form1.Image1.Height),5,5,5);
Ball1.zeigen;
Ball2.Init(random(Form1.Image1.Width),random(Form1.Image1.Height),10,5,5);
Ball2.zeigen;
Ball3.Init(random(Form1.Image1.Width),random(Form1.Image1.Height),5,10,5);
Ball3.zeigen;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Ball1.zeigen;Ball2.zeigen;Ball3.zeigen;
Ball1.bewegen;Ball2.bewegen;Ball3.bewegen;
Ball1.zeigen;Ball2.zeigen;Ball3.zeigen;
end;

initialization
randomize;
Ball1 := tBall.Create;
Ball2 := tBall.Create;
Ball3 := tBall.Create;


finalization
ball1.Destroy;
ball2.Destroy;
ball3.Destroy;
end.



THX 4 HLP

mfg


Lord_Otter
04.09.2002, 20:27
Moment, wie kann denn das funktionieren ?

TBall.Create ?

Du hast doch gar keinen Konstruktor definiert und implementiert.
Eigentlich dürfte er das Programm doch garnicht kompilieren, oder habe ich da was falsch verstanden ?

DerWolf
04.09.2002, 20:37
Hallo,
du solltest bei:
procedure tBall.zeigen;
die koordinaten richtig angeben:

procedure tBall.zeigen;
begin
Form1.Image1.Canvas.Ellipse(x-r,y-r,x+r,y+r);
end;

musses heißen und bei
procedure tBall.bewegen;
musst du die letzten 2 zeilen einfügen:

procedure tBall.bewegen;
begin
if x > Form1.Image1.Width-r then vx := -vx;
if x < 0+r then vx := -vx;
if y > Form1.Image1.Height-r then vy := -vy;
if y < 0+r then vy := -vy;
x := x + vx;
y := y + vy;
end;

ich hoff du weißt warum :)

DerWolf
04.09.2002, 20:38
Doch Lord_Otter geht so :)

Manu
04.09.2002, 20:40
Nächstes mal bitte die http://www.coding-board.de/board/images/edit.gif Funktion nehmen, danke :)

Edit: Danke für die Bestätigung ;)

Lord_Otter
05.09.2002, 21:03
Das finde ich ich irgentwie komisch, dass das geht. Ich dachte, dazu müsste das Objekt von TObjekt abgeleitet sein, dass den Konstructor Create bereitstellt, aber wenn das auch ohne geht...
Naja, wieder was gelernt...:)