Array Problem
spacer
Autor Nachricht
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 markieren
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..9] of 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<151) or (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;
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 452
Erhaltene Danke: 6



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 markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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.....
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

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
DRY DRY KISS

Für diesen Beitrag haben gedankt: Lazarusboy
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 452
Erhaltene Danke: 6



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 markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

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
DRY DRY KISS

Für diesen Beitrag haben gedankt: Lazarusboy
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 230
Erhaltene Danke: 17

WinXP und Win98SE
Delphi 6 pro, Delphi 2006 und Turbo Pascal 7
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)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home