Der Y-Wert wird ja durch den X-Wert bestimmt, da Y = F(x) = sin(x) ist. Also brachst du nur den X-Wert angeben und per Sinusfunktion den Y-Wert errechnen. Dazu addierst du noch die abolute Position, etwa 512, 384, damit dein Raumschiff etwa in der Mitte des Bildschirmes ist (bei 1024 x 768 px.)
Allerdings musst du in PureBasic den Winkel im Bogenmaß angeben, solltest du bedenken.
Ein Beispiel wäre etwa:
Code: Alles auswählen
repeat ;Hauptschleife
x = x + 1
clearscreen(0,0,0)
DisplaySprite(0, x + 512, (10* Sin(x/10)) + 384)
flipbuffers()
until quit = #true ; ende der Hauptschleife
Dabei würde jetzt das Raumschiff bei 500, 384 Pixeln starten und sinusförmig sich fortbewegen. Denn jeder Schleifendurchlauf wird die X-Stelle geändert, daraus die Y-Stelle berechnet und dort das Sprite angezeigt.
Wenn sich jetzt die X-Position nicht ändern soll, die des Raumschiffes, es also nur hoch und runter schwingt, dann musst du beim Anzeigen des Sprites einfach nur bei der X-Position die Variable x rauslassen. Dann bleibgt das Raumschiff immer konstant bei 512 Pixeln.
(Der Code oben ist provisorisch, da musst du natürlich noch einides hinzufügen. Das soll nur zeigen wie man es machen könnte)
//EDIT: Um die Amplitude (die Höhe um welche das Raumschiff ausgelenkt wird) zu ändern, musst du nur den Faktor "10" vor dem sin(x/10) ändern. Etwa auf 100. Um das Raumschiff langsamer zu machen, die "10" des "x/10" auf 100 setzen, schon ist es deutlich langsamer. Da musst du jetzt ein paar Werte ausprobieren, was dir da so am besten gefällt.
//Edit2: So sieht das dann als Programm aus:
Code: Alles auswählen
InitSprite() : InitKeyboard()
OpenScreen(1024, 768, 32, "Sinus-Test")
CreateSprite(0, 10, 10)
Repeat
ClearScreen(100,122,130)
x = x + 1
DisplaySprite(0, 512, (100* Sin(x/100)) + 384)
FlipBuffers(0)
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
quit = #True
EndIf
Until quit = #True
Kannst du direkt kompilieren und ansehen was passiert.
//Edit3: Wichtig ist, dass du den X-Wert nach Ablauf einer Schwingung wieder auf 0 setzt, sonst wird der irgendwann im Laufe des programms so riesig dass er den Rahmen der Long sprengt und es zu Fehlern kommen kann.
