Entwickler-Ecke

Multimedia / Grafik - Schon wieder Kreis bewegen


wayne123 - Fr 28.01.11 22:37
Titel: Schon wieder Kreis bewegen
Okay, da ich ja gemerkt habe, dass das bei meinem ersten Versuch zu kompliziert war und ich das auch alleine noch einmal und auch in der Form machen wollte, hab ich das Projekt nochmal neu probiert. Jetzt hab ich nur ein Problem. Ich benutz ne for-to Schleife, die alles immer wieder abspielt und alle if-then abfragt. Jetzt hab ich nur das Problem, dass er den Kreis abprallen lässt, aber auch nur während eben der Kreis den Rand berührt. Ergebnis: Der Ball rollt am Rand entlang aus dem Bild. Weiß jemand, wie ich das umgehen kann? Ich glaub es liegt an der for-to Schleife nur ich weiß keine Alternative dazu.

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:
unit UnitBewegen;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var w,x,y,z,i,j,a: integer;
begin
w:=100;
x:=200;
y:=300;
z:=400;
i:=0;
j:=0;
for a:= 1 to 1000 do
begin
refresh;
Canvas.Ellipse(w+i,x+j,y+i,z+j);
inc(i);
inc(j);
if z+j>= Clientheight then
j:=j-1



end;
end;
end.


Regan - Fr 28.01.11 22:53

Du vergrößerst j immer, egal ob du schon am Rand bist.


wayne123 - Fr 28.01.11 22:57

Ja gut, das hab ich geändert, aber er verkleinert j trotzdem bei mir nur in diesem einem Moment, wenn ich den Rand berühre.


guinnes - Fr 28.01.11 23:35

Ich find das absolut geil, wenn Leute einem zwar ein Loch in den Bauch fragen, aber nicht das geringste aus den Antworten lernen :
1. Warum formatierst du deinen Quältext immer noch nicht ? http://www.delphi-forum.de/viewtopic.php?t=103817
2. Was passiert, wenn ein Teil irgendwo abprallt ? Genau, die Richtung ändert das Vorzeichen !! Und was machst du ?


wayne123 - Fr 28.01.11 23:40

Wie man formatiert, weiß ich nicht und da mir dann gesagt wurde, wo ein end fehlte war der Fehler ja weg. Alleine aber j:=-j zu schreiben reicht aber nicht, oder?


Regan - Fr 28.01.11 23:53

user profile iconwayne123 hat folgendes geschrieben Zum zitierten Posting springen:
Ja gut, das hab ich geändert, aber er verkleinert j trotzdem bei mir nur in diesem einem Moment, wenn ich den Rand berühre.

Und was könnten wir dagegen unternehmen? Vielleicht eine boolsche Variable einführen, die sich merkt, ob wir +1 oder -1 rechnen sollten!?

user profile iconwayne123 hat folgendes geschrieben Zum zitierten Posting springen:
Wie man formatiert, weiß ich nicht und da mir dann gesagt wurde, wo ein end fehlte war der Fehler ja weg.

Müssen wir dir androhen, keine Lösungen mehr zu posten? :evil: Sicherlich nicht. Lesen: Delphi-Styleguide [http://www.delphi-treff.de/object-pascal/delphi-styleguide/] :les:


wayne123 - Fr 28.01.11 23:57

Achso jetzt hab ich auch verstanden, was ihr alle mit formatieren meint^^. Em, aber was ist eine boolsche Variabel? Ich wollts eig. so billig wie möglich halten, sind die denn kompliziert?


elundril - Sa 29.01.11 00:03

Boolsche Variablen sind Variablen die genau zwei mögliche Werte annehmen können. Entweder true oder false, also wahr oder falsch. Sind supereinfach zu bedienen und das geilste ist: Man kann Boolsche Operatoren anwenden um diese Wahrheitswerte zu verknüpfen. Mehr dazu dann aber in den Tutorials, die ich dir dringend empfehle:

Christians Crashkurs [http://www.christian-stelzmann.de/index_tutorials_crashkurs.html]
Delphi-Wikibook [http://de.wikibooks.org/wiki/Programmierkurs:_Delphi]

lg elundril


wayne123 - Sa 29.01.11 00:09

Okay, die guck ich mir dann erstmal an.
Wär denn die Formatierung so richtig oder hab ich was übersehen, bzw. fehlt etwas?


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:
unit UnitBewegen;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var w,x,y,z,i,j,a: integer;
begin
w := 100;
x := 200;
y := 300;
z := 400;
i := 0;
j := 0;
for a := 1 to 1000 do
begin
  refresh;
  Canvas.Ellipse(w+i, x+j, y+i, z+j);
  inc(i);
  if z+j >= Clientheight then
  begin
    j := -j
  end
  else
    inc(j);
  end;
end;
end.