Wie soll ich das machen? Also wie soll ich die X,Y Werte bei jedem Schleifendurchlauf verändern?
Sinus, Cosinus ?_?
Sinus, Cosinus ?_?
Ich will die Raumschiffe in meinem Spiel so eine Sinus Welle auf und ab fliegen lassen, nur hab ich keine Ahnung wie
Wie soll ich das machen? Also wie soll ich die X,Y Werte bei jedem Schleifendurchlauf verändern?
Wie soll ich das machen? Also wie soll ich die X,Y Werte bei jedem Schleifendurchlauf verändern?
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:
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:
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.
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
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//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.