Entwickler-Ecke
Sonstiges (Delphi) - Array Problem
Lazarusboy - Di 06.12.11 18:05
Titel: Array Problem
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
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..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; |
ub60 - 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:
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 - 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 - 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.
Lazarusboy - 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 - 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:
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 - Di 06.12.11 23:43
Inzwischen wurde ja geantwortet, ich war dabei ein kleines Beispiel zu basteln ...
ist im Anhang
Lazarusboy - 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 - Do 08.12.11 22:00
bummi hat folgendes geschrieben : |
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!