ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
1352
1352
EMPFEHLEN
-
04.01.09 20:46 #1
- Registriert seit
- Jan 2009
- Beiträge
- 1
Hi,
ein Kumpel und ich programmiern für die Schule ein kleines Spiel. Hierfür bräuchte ich die Animation eines Flußes in 2d.
Trotz mittlerweilen schon ein paar Jahren Info bin ich nun wirklich nicht so der Pro, von daher bitte Rücksicht nehmen sollte die Frage etwas bescheuert klingen.
Die Flußanmation soll nicht sehr aufwendig sein und vertikal verlaufen.
In der Schule hatten wir mal ne Sinuskurve, diese wollte ich nun verwenden, indem ich mehrere Sinuskruven eng nebeneinander ablaufen lasse ( Farbe: Blau --> Fluss )
Der Quelltext sieht so aus:
Code :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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
... var sh1: array[1..100] of tshape; sh2: array[1..100] of tshape; sh3: array[1..100] of tshape; sh4: array[1..100] of tshape; sh5: array[1..100] of tshape; zeit:integer=0; start:boolean=false; interferenz:boolean=false; Amplitude, Frequenz: integer; Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin For i:= 1 To 100 Do begin sh1[i]:=tshape.create(form1); sh1[i].parent:=form1; sh1[i].Width:=15; sh1[i].Height:=15; sh1[i].Shape:=stRoundSquare; sh1[i].Brush.color:=clblue; sh1[i].Pen.color:=clblue; sh1[i].Top:=216; sh1[i].Left:=18+i*5; end; For i:= 1 To 100 Do begin sh2[i]:=tshape.create(form1); sh2[i].parent:=form1; sh2[i].Width:=15; sh2[i].Height:=15; sh2[i].Shape:=stRoundSquare; sh2[i].Brush.color:=clblue; sh2[i].Pen.color:=clblue; sh2[i].Top:=216; sh2[i].Left:=18+i*5; end; For i:= 1 To 100 Do begin sh3[i]:=tshape.create(form1); sh3[i].parent:=form1; sh3[i].Width:=15; sh3[i].Height:=15; sh3[i].Shape:=stRoundSquare; sh3[i].Brush.color:=clblue; sh3[i].Pen.color:=clblue; sh3[i].Top:=216; sh3[i].Left:=18+i*5; end; For i:= 1 To 100 Do begin sh4[i]:=tshape.create(form1); sh4[i].parent:=form1; sh4[i].Width:=15; sh4[i].Height:=15; sh4[i].Shape:=stRoundSquare; sh4[i].Brush.color:=clblue; sh4[i].Pen.color:=clblue; sh4[i].Top:=216; sh4[i].Left:=18+i*5; end; end; procedure TForm1.Timer1Timer(Sender: TObject); var i: integer; begin Amplitude:=StrToInt(EAmplitude.Text); Frequenz:=StrToInt(EFrequenz.Text); inc(zeit); For i:= 1 To 100 Do begin sh1[i].Top:=220+round(Amplitude*sin((2*pi/Frequenz)*(zeit-sh1[i].Left/5))); end; For i:= 1 To 100 Do begin sh2[i].Top:=235+round(Amplitude*sin((2*pi/Frequenz)*(zeit-sh2[i].Left/5))); end; For i:= 1 To 100 Do begin sh3[i].Top:=250+round(Amplitude*sin((2*pi/Frequenz)*(zeit-sh3[i].Left/5))); end; For i:= 1 To 100 Do begin sh4[i].Top:=265+round(Amplitude*sin((2*pi/Frequenz)*(zeit-sh4[i].Left/5))); end; ...
Nun 2 Fragen hierzu:
1. Wie bekomme ich diese Sinuskurven in die vertikale ( wenn möglich biite auf einfachen Niveau erklärt ;-D )
2. Bei der Animation entsteht ein Flackern, wie lässt sich dieses ausschalten?
Danke schonmal, hoffe euch nicht mit meinem Text erschlagen zu haben,
Mfg Martin
PS: Falls jemand noch eine andere Methode zur Animation des Flußes einffällt, die nicht allzu kompliziert ist, nur her damit ...
-
09.01.09 08:41 #2
- Registriert seit
- Mar 2004
- Beiträge
- 441
Also so ganz spontan würde ich sagen: Tausch doch einfach die Zuweisung an Top und Left aus. Dann sollte sich die Kurve um 90° drehen.
Und was das Flackern angeht: Keine Ahnung, auf was für einem Canvas du die Sachen anzeigst, aber zur Not setze einfach vom Hauptformular die DoubleBuffered-Eigenschaft auf true:
Diese Eigenschaft musst du allerdings im Source setzen (z.B. im OnCreate), über den Objektinsepktor ist sie nicht erreichbar.Code delphi:1
TForm1.DoubleBuffered := true;
Ähnliche Themen
-
Koordinatensystem mit Sinuskurve in Delphi
Von jonney im Forum Delphi, Kylix, PascalAntworten: 1Letzter Beitrag: 17.12.10, 20:01 -
sinuskurve c#
Von deen_90 im Forum .NET CaféAntworten: 9Letzter Beitrag: 31.03.08, 23:18 -
Delphi - Sinuskurve
Von shapeless im Forum Delphi, Kylix, PascalAntworten: 4Letzter Beitrag: 24.09.05, 22:31 -
sinuskurve berechnen
Von 123arne im Forum C/C++Antworten: 1Letzter Beitrag: 09.06.05, 08:16 -
Sinuskurve? Wie?
Von checkerno1 im Forum PhotoshopAntworten: 6Letzter Beitrag: 08.11.01, 07:02





Zitieren
Login





