Delphi
Moderator: Katana
Delphi
Hi
Hab eines kleines programm gemacht, ist aber noch nicht fertig.
Habe: 2 Spinedits, 2 Shapes und einen Timer. Mit den Spinedits kann man die richtungen der Shapes(Kreise) und wie schnell sie sich bewegen sollen verändern. Ich will das so, wenn sich die Shapes(Kreise) bewegen z.B. nach schräg unter bewegen, dass sie dann vom Ende oder Wand des Formulars abprallen und dass es die ganze Zeit soweitergeht bis ich es beende. Wie kann ich es machen, dass Shapes(Kreise) von der des Formulars immer abprallen?
Hab eines kleines programm gemacht, ist aber noch nicht fertig.
Habe: 2 Spinedits, 2 Shapes und einen Timer. Mit den Spinedits kann man die richtungen der Shapes(Kreise) und wie schnell sie sich bewegen sollen verändern. Ich will das so, wenn sich die Shapes(Kreise) bewegen z.B. nach schräg unter bewegen, dass sie dann vom Ende oder Wand des Formulars abprallen und dass es die ganze Zeit soweitergeht bis ich es beende. Wie kann ich es machen, dass Shapes(Kreise) von der des Formulars immer abprallen?
Delphi
Da brauchst du ne collision-detection, die alles außenrum überprüft, ob ein Rand des Shapes den Form Rand berührt. Leider läuft mein Delphi im Moment nicht, aber ich installiers heute neu, und dann seh ich mal, ob ich sowas zusammen bekomme.
Such solange mal hier
P.S.: "spühlen" schreibt man ohne "h"
[ 22. Dezember 2001: Beitrag editiert von: DarkZero ]
Such solange mal hier
P.S.: "spühlen" schreibt man ohne "h"
[ 22. Dezember 2001: Beitrag editiert von: DarkZero ]
Delphi
<BLOCKQUOTE><font size="1" face="Verdana, Arial">Code:</font><HR><pre>
repeat
if (Shape1.Left + Shape1.Width = Shape2.Left) and (Shape2.Left + Shape2.Width = Shape1.Left) then
begin
leftright1 := -leftright1;
leftright2 := -leftright2;
end;
if (Shape1.Top - Shape1.Height = Shape2.Top) and (Shape2.Top - Shape2.Height = Shape1.Top) then
begin
updown1 := -updown1;
updown2 := -updown2;
end;
Shape1.Left := Shape1.Left + leftright1;
Shape2.Left := Shape2.Left + leftright2;
Shape1.Top := Shape1.Top + updown1;
Shape2.Top := Shape2.Top + updown2;
until abort;
</pre><HR></BLOCKQUOTE>
oder ähnlich!
Mit den Reglern mußte aufpassen... mußte noch reinschreiben, daß updown1/2 = SpinEdit1.Value und leftright1/2 = SpinEdit2.Value sein sollen (in die OnChange der SpinEdits). Da mußte noch überprüfen, ob das über oder unter 0 ist (wegen der Richtung).
Oh ... mir ist gerade aufgefallen ... ich hab' 'ne Kollisionsabfrage der beiden Shapes geschrieben ... aber die kannste ganz einfach für's Formular umbasteln
Ach ja ... das ganze kommt in die "OnTimer" ^^
[ 22. Dezember 2001: Beitrag editiert von: Katana ]
repeat
if (Shape1.Left + Shape1.Width = Shape2.Left) and (Shape2.Left + Shape2.Width = Shape1.Left) then
begin
leftright1 := -leftright1;
leftright2 := -leftright2;
end;
if (Shape1.Top - Shape1.Height = Shape2.Top) and (Shape2.Top - Shape2.Height = Shape1.Top) then
begin
updown1 := -updown1;
updown2 := -updown2;
end;
Shape1.Left := Shape1.Left + leftright1;
Shape2.Left := Shape2.Left + leftright2;
Shape1.Top := Shape1.Top + updown1;
Shape2.Top := Shape2.Top + updown2;
until abort;
</pre><HR></BLOCKQUOTE>
oder ähnlich!
Mit den Reglern mußte aufpassen... mußte noch reinschreiben, daß updown1/2 = SpinEdit1.Value und leftright1/2 = SpinEdit2.Value sein sollen (in die OnChange der SpinEdits). Da mußte noch überprüfen, ob das über oder unter 0 ist (wegen der Richtung).
Oh ... mir ist gerade aufgefallen ... ich hab' 'ne Kollisionsabfrage der beiden Shapes geschrieben ... aber die kannste ganz einfach für's Formular umbasteln
Ach ja ... das ganze kommt in die "OnTimer" ^^
[ 22. Dezember 2001: Beitrag editiert von: Katana ]
Delphi
*hehe*
Ich helf' doch gern'
Ich hab' mir da auch so'n lustiges Ping-Pong spielchen gebastelt. Hat sogar DirectInput-Unterstützung!
Nur hätte ich auch gern' noch DirectPlay unterstützung für LAN/INet ... hab' zwar keine Ahnung, wer das über LAN daddeln würde, aber zum lernen wär's ganz gut
Weiß da vielleicht wer Tuts?
@Dark: Dei Icon funzt net so ganz!
Ich helf' doch gern'
Ich hab' mir da auch so'n lustiges Ping-Pong spielchen gebastelt. Hat sogar DirectInput-Unterstützung!
Nur hätte ich auch gern' noch DirectPlay unterstützung für LAN/INet ... hab' zwar keine Ahnung, wer das über LAN daddeln würde, aber zum lernen wär's ganz gut
Weiß da vielleicht wer Tuts?
@Dark: Dei Icon funzt net so ganz!
Delphi
Ich weiß, ich vergess immer es auf meinen Server zu laden.
Mit I-Net/Lan Unterstützung ist etwas kompliziert. Da mußt du DAtten an einen Port der IP schicken, der sagt, der Gegner bewegt sich soundso, aktualisiere den Shape, und dasselbe mit dem Ball.
Mit I-Net/Lan Unterstützung ist etwas kompliziert. Da mußt du DAtten an einen Port der IP schicken, der sagt, der Gegner bewegt sich soundso, aktualisiere den Shape, und dasselbe mit dem Ball.
-
Mysterious
- Beiträge: 395
- Registriert: Sa Jun 30, 2001 12:01 am
Delphi
<<<<<HIER>>>>>>>
vielleicht hift dir das. Ist mir nur spontan eingefallen.
vielleicht hift dir das. Ist mir nur spontan eingefallen.
Delphi
<BLOCKQUOTE><font size="1" face="Verdana, Arial">Code:</font><HR><pre>procedure TForm1.Timer1Timer(Sender: TObject);
var x, y : Integer;
begin
x:= StrToInt(Spinedit1.Text);
y:= StrToInt(Spinedit2.Text);
Shape1.Left := Shape1.left +x;
Shape1.Top := Shape1.Top +y;
shape2.left:= shape2.left-x;
shape2.top:= shape2.top-y;
end;
end. </pre><HR></BLOCKQUOTE>
Mein jetziger Quellcode.
Wie kann am besten den quellcode im mein jetzigen quellcode am besten intigrieren?
var x, y : Integer;
begin
x:= StrToInt(Spinedit1.Text);
y:= StrToInt(Spinedit2.Text);
Shape1.Left := Shape1.left +x;
Shape1.Top := Shape1.Top +y;
shape2.left:= shape2.left-x;
shape2.top:= shape2.top-y;
end;
end. </pre><HR></BLOCKQUOTE>
Mein jetziger Quellcode.
Wie kann am besten den quellcode im mein jetzigen quellcode am besten intigrieren?
Delphi
Also ... ich hab' das jetzt nochmal komplett neu geschrieben 
<BLOCKQUOTE><font size="1" face="Verdana, Arial">Code:</font><HR><pre>
var
x,y: Integer;
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
if (x > 0) then
x := TrackBar1.Position
else
x := -TrackBar1.Position;
end;
procedure TForm1.TrackBar2Change(Sender: TObject);
begin
if (y > 0) then
y := TrackBar2.Position
else
y := -TrackBar2.Position;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Shape1.Left := Shape1.Left + x;
Shape1.Top := Shape1.Top + y;
if (Shape1.Left <= 0) or (Shape1.Left + Shape1.Width >= Form1.Width) then
x := -x;
if (Shape1.Top <= 0) or (Shape1.Top + Shape1.Height >= Form1.Height) then
y := -y;
end;
</pre><HR></BLOCKQUOTE>
Form1.Borderstyle sollte bsSingle oder bsNone sein.
Ich würd' dir auch keine SpinEdit, sondern Trackbars's empfehlen.
Timer1.Interval hab' ich auf 10 gestellt.
MfG
<BLOCKQUOTE><font size="1" face="Verdana, Arial">Code:</font><HR><pre>
var
x,y: Integer;
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
if (x > 0) then
x := TrackBar1.Position
else
x := -TrackBar1.Position;
end;
procedure TForm1.TrackBar2Change(Sender: TObject);
begin
if (y > 0) then
y := TrackBar2.Position
else
y := -TrackBar2.Position;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Shape1.Left := Shape1.Left + x;
Shape1.Top := Shape1.Top + y;
if (Shape1.Left <= 0) or (Shape1.Left + Shape1.Width >= Form1.Width) then
x := -x;
if (Shape1.Top <= 0) or (Shape1.Top + Shape1.Height >= Form1.Height) then
y := -y;
end;
</pre><HR></BLOCKQUOTE>
Form1.Borderstyle sollte bsSingle oder bsNone sein.
Ich würd' dir auch keine SpinEdit, sondern Trackbars's empfehlen.
Timer1.Interval hab' ich auf 10 gestellt.
MfG

