Autor Beitrag
Lazarusboy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Di 06.12.11 18:05 
Hallo Leute,
Habe eine kleines Problem, hatte letztens ein Projekt erstellt, wo sich ein Ball in einem Fenster hin un her bewegt, nun wollte ich durch array mehrere hinzufügen. Nur leider habe ich nach mehreren Versuchen keine Lösung gefunden, würde mich freuen wenn mir jemand helfen kann
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
var
  Form1: TForm1;
  Ball:TBall;
  x,y,s:integer;
  RX,RY:integer;
  Halt:boolean;
  a:array[1..9of TBall;
 

implementation

{$R *.dfm}
constructor TBall.Create(Posx,Posy,Size:integer);
begin
x:=PosX; y:=PosY; s:=Size;
end;

procedure TBall.Bewegen;
begin
Halt:=false;
Ball:=TBall.Create(100,150,80);
randomize;
x:=random(749)+101;
y:=random(299)+151;
repeat
Application.ProcessMessages;
Randomize;
RX:=random(12)+1;
RY:=Random(6)+1;
while  (x<(950-s)) and (y<(600-s)) and (Halt=false) do begin
Application.ProcessMessages;
X:=x+RX;
y:=y+RY;
Form1.DoubleBuffered:=true;
Form1.Refresh;
Form1.Canvas.Ellipse(x,y,x+s,y+s);
end;
Form1.Canvas.Ellipse(x,y,x+s,y+s);
RX:=random(12)+1;
RY:=Random(6)+1;
repeat
Application.ProcessMessages;
X:=x-RX;
y:=y-RY;
Form1.DoubleBuffered:=true;
Form1.Refresh;
Form1.Canvas.Ellipse(x,y,x+s,y+s);
until  (y<151or (x<(101)) or (Halt=true);
until Halt=true;

end;

procedure TBall.Verschwinden;
begin
Form1.Refresh;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Ball:=TBall.Create(100,150,80);
Form1.Canvas.Brush.Color:=clred;
end;

procedure TForm1.BStartClick(Sender: TObject);
begin
Ball.Bewegen;
end;
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: Di 06.12.11 19:00 
An mehreren Stellen sollten dann auch die ganzen Bälle und nicht nur einer angesprochen werden, z. B. so:

ausblenden Delphi-Quelltext
1:
2:
for i:=1 to 
  a[i]:=TBall.Create(x, y, r);

Das Gleiche gilt dann natürlich auch für das Bewegen usw.

ub60
Lazarusboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Di 06.12.11 20:16 
okay danke , habe ich grade versucht, nur ändert sich da rein gar nichts....
Habe grade aber rausgefunden, dass jeder einzelne Ball nacheinander startet und nicht gleichzeitig, dh erst wenn ich beende drücke , fängt ein neuer an.....
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 06.12.11 22:01 
Es wird ja auch jedesmal die komplette Bewegen-Routine durchlaufen.

Gib TBall ein paar mehr Informationen mit (Grenzen x,y,Richtung,Canvas) und bau bewegen um auf eine einzelne Bewegung.

Später läufst Du über Dein BallArray in der Art

Wenn nicht BallArray[i].Halt dann BallArray[i].Bewegen, das ganz in einem Äußeren Loop solange bis alle Bälle auf Halt stehen.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: Lazarusboy
Lazarusboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Di 06.12.11 22:23 
Okay, teilweise verstanden.
Nur wie soll ich die ganzen Informationen in TBall dann nutzen. Verstehe da noch nicht ganz das Prinzip.
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: Di 06.12.11 23:11 
Die Informationen, die Du in Deinem ganzen Programm verteilst, sollten zum Großteil in der Klasse TBall sein, zum Beispiel so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
type TBall=class
  protected
    FCanvas : TCanvas;
    FFarbe : TColor;
    FGeschwindigkeitX, FGeschwindigkeitY : Integer;
    FX, FY, FRadius: Integer;
    FGrenzeX, FGrenzeY : Integer;
  public
    constructor Create;
    procedure SetCanvas(Canvas:TCanvas);
    procedure SetFarbe(Farbe : TColor);
    procedure SetGrenzeX(x:Integer);
    procedure SetGrenzeY(y:Integer);
    procedure Zeichne;
    procedure Loesche;
    procedure Bewege;
end;

Die Werte für FX, FY, FRadius und die Geschwindigkeiten kannst Du in Create setzen.
Die Grenzen der Bewegung setzt Du in Abhängigkeit von Deiner Zeichenfläche.
Die Methode Bewege überprüft die Grenzen und setzt für FGeschwindigkeit bei Bereichsüberschreitung jeweils den negativen Wert des verherigen Wertes.
In einem Timer rufst Du dann aller paar Millisekunden folgendes auf:
-alle Bälle löschen
-alle Bälle bewegen
-alle Bälle zeichnen

ub60
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 06.12.11 23:43 
Inzwischen wurde ja geantwortet, ich war dabei ein kleines Beispiel zu basteln ...
ist im Anhang
Einloggen, um Attachments anzusehen!
_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: Lazarusboy
Lazarusboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 08.12.11 21:50 
Danke für eure Hilfe,
Ich lasse es jetzt lieber, nach gefühlten 100 Versuchen scheitere ich noch immer... :-(
Mehrere Bälle werden zwar teilweise erzeugt, bewegen sich dann aber net und etc.
Lazarusboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Do 08.12.11 22:00 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
Inzwischen wurde ja geantwortet, ich war dabei ein kleines Beispiel zu basteln ...
ist im Anhang


Okay, funkt doch, mehrere Bälle bilden sich ... thx
Jetzt hab ich wenigstens ein Eindruck wie das ungefähr funktioniert.
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 617
Erhaltene Danke: 364

W7
Delphi 6 pro
BeitragVerfasst: Fr 09.12.11 11:03 
Moin Lazarusboy,
vielleicht hilt dies weiter: www.delphi-forum.de/...ng+in+OOP_80910.html
Gruß Fiete

_________________
Fietes Gesetz: use your brain (THINK)