Flugbahn von Gegnern vorgeben
Das ist etwas dass ich bis jetzt ebenfalls nicht begriffen habe.
Ich habe diverse Beispiele inklusive deinem, wo immer mit IncludeBinary
gearbeitet wird. Dies gilt sowohl für Data's wie Bilder usw.
Ich hatte es jetzt einfach mit IncludeFile gelöst, läuft einwandfrei. Ich verstehe den Unterschied nicht.
Bzw. wo liegen die Unterschiede bei IncludeBinary und IncludeFile ?
Ich habe diverse Beispiele inklusive deinem, wo immer mit IncludeBinary
gearbeitet wird. Dies gilt sowohl für Data's wie Bilder usw.
Ich hatte es jetzt einfach mit IncludeFile gelöst, läuft einwandfrei. Ich verstehe den Unterschied nicht.
Bzw. wo liegen die Unterschiede bei IncludeBinary und IncludeFile ?
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
http://www.purebasic.com/german/documen ... ludes.html
IncludeFile dagegen ist AUSSCHLIESSLICH für PB-Quellcodes gedacht.
IncludeFile fügt die genannte Programmdatei (Datei mit PureBasic-Sourcecode) an der aktuellen Stelle in den Programmcode ein. XIncludeFile macht genau dasselbe, außer dass es vermeidet, dieselbe Datei mehrfach einzufügen.
//EDIT: IncludeBinary ist also dazu gedacht, alles, was nicht Quellcode ist, zum Programm dazuzulinken, z.B. Sounds, Grafiken, etc...IncludeBinary fügt die genannte Datei an der aktuellen Stelle in das Programm ein. Das Einfügen sollte dabei innerhalb eines Data-Blocks erfolgen.
IncludeFile dagegen ist AUSSCHLIESSLICH für PB-Quellcodes gedacht.
Ich wollte mal einen Flugbahnversuch mit einer Sinuskurve starten.
Ich hab dazu die Formel von @Laurin angeschaut und dies mal in ein Beispiel eingefügt. Das Problem ist,
wenn ich die Y Achse vergrössere, damit Sprite ein wenig schneller nach unten fährt. Hüpft das Sprite nur
noch umher. Wenn ich Y sehr klein lasse wie im Beispiel hab ich einen schönen Sinus. Was kann ich tun,
damit Sprite schneller und dennoch sauber nach unten läuft?
Beispiel:
Ich hab dazu die Formel von @Laurin angeschaut und dies mal in ein Beispiel eingefügt. Das Problem ist,
wenn ich die Y Achse vergrössere, damit Sprite ein wenig schneller nach unten fährt. Hüpft das Sprite nur
noch umher. Wenn ich Y sehr klein lasse wie im Beispiel hab ich einen schönen Sinus. Was kann ich tun,
damit Sprite schneller und dennoch sauber nach unten läuft?
Beispiel:
Code: Alles auswählen
InitSprite() : InitKeyboard()
OpenScreen(800,600,32,"")
Define.f m=200, n=300, y=10
eck = CreateSprite(#PB_Any,40,40)
StartDrawing(SpriteOutput(eck))
Box(0,0,40,40,RGB(255,255,255))
StopDrawing()
Repeat
ClearScreen(0)
ExamineKeyboard()
x = m*Sin(y)+n
DisplaySprite(eck,x,y)
y+0.04
;y+2
Delay(1)
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Beim DisplaySprite den Sträkungsfaktor einbauen
Code: Alles auswählen
InitSprite() : InitKeyboard()
OpenScreen(800,600,32,"")
Define.f m=200, n=300, y=10
eck = CreateSprite(#PB_Any,40,40)
StartDrawing(SpriteOutput(eck))
Box(0,0,40,40,RGB(255,255,255))
StopDrawing()
Repeat
ClearScreen(0)
ExamineKeyboard()
x = m*Sin(y)+n
DisplaySprite(eck,x,y*20) ; DAA !
y+0.04
;y+2 << NICHT HIER
Delay(1)
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
du musst dir klarmachen, welcher faktor wo was tut.
das Argument für Sin() ist der Winkel in Radiant.
eine Phase des Sinus (also, ein berg ein tal, bis er wieder von vorne anfängt)
dauert immer von 0 bis 2*PI.
wenn du die x-koordinate direkt eingibst, dann wechselt das so schnell, dass nur son muster rauskommt.
alle 6 pixel fängt es von vorne an, so kann man keine zusammenhängende kurve plotten.
wenn du x durch 5 teilst, lässt du ihm sozusagen 5x so lange zeit.
es dauert jetzt 31 pixel, bis es von vorne anfängt, da kann man schon ne kurve erkennen.
bei /25 dauert eine phase ganze 157 pixel, das ist schon ne schön sanfte kurve.
das andere, der faktor davor, ist die Amplitude, also die Höhe der Kurve.
in den ersten drei fällen ist das 20, die kurve geht also von -20 bis +20 um ihre achse.
beim 4ten ist das 50, beim 5ten 100, der effekt ist ja klar zu erkennen.
dann gibt es noch die verschiebung, das ist das +sowieso, was ich direkt beim Plot reingeschrieben hab.
das bestimmt, wohin die Achse der Kurve verschoben wird.
Cos ergibt übrigens ein ähnliches bild, die gleiche kurve nur um 1/4 (90°) Phasenverschoben.
Code: Alles auswählen
InitSprite()
InitKeyboard()
OpenScreen(1024,768,32,"SinDemo")
ClearScreen($201010)
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
For x=0 To 1023 ; das x zum Plotten
; ich mach die berechnungen mal getrennt, zur besseren Lesbarkeit
xf.f = x ; in ne float überführen, damit die teilung sicher funktioniert
y1 = 20 * Sin( xf )
y2 = 20 * Sin( xf / 5 )
y3 = 20 * Sin( xf / 25 )
y4 = 50 * Sin( xf / 25 )
y5 = 100 * Sin( xf / 25 )
Plot( x, y1 + 60, $FF8080 )
Plot( x, y2 + 170, $FF8080 )
Plot( x, y3 + 280, $FF8080 )
Plot( x, y4 + 410, $FF8080 )
Plot( x, y5 + 620, $FF8080 )
Next
DrawText( 10, 10, "y1 = 20 * Sin( xf )", $C06060 )
DrawText( 10, 120, "y2 = 20 * Sin( xf / 5 )", $C06060 )
DrawText( 10, 230, "y3 = 20 * Sin( xf / 25 )", $C06060 )
DrawText( 10, 340, "y4 = 50 * Sin( xf / 25 )", $C06060 )
DrawText( 10, 500, "y5 = 100 * Sin( xf / 25 )", $C06060 )
StopDrawing()
FlipBuffers()
Repeat
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
eine Phase des Sinus (also, ein berg ein tal, bis er wieder von vorne anfängt)
dauert immer von 0 bis 2*PI.
wenn du die x-koordinate direkt eingibst, dann wechselt das so schnell, dass nur son muster rauskommt.
alle 6 pixel fängt es von vorne an, so kann man keine zusammenhängende kurve plotten.
wenn du x durch 5 teilst, lässt du ihm sozusagen 5x so lange zeit.
es dauert jetzt 31 pixel, bis es von vorne anfängt, da kann man schon ne kurve erkennen.
bei /25 dauert eine phase ganze 157 pixel, das ist schon ne schön sanfte kurve.
das andere, der faktor davor, ist die Amplitude, also die Höhe der Kurve.
in den ersten drei fällen ist das 20, die kurve geht also von -20 bis +20 um ihre achse.
beim 4ten ist das 50, beim 5ten 100, der effekt ist ja klar zu erkennen.
dann gibt es noch die verschiebung, das ist das +sowieso, was ich direkt beim Plot reingeschrieben hab.
das bestimmt, wohin die Achse der Kurve verschoben wird.
Cos ergibt übrigens ein ähnliches bild, die gleiche kurve nur um 1/4 (90°) Phasenverschoben.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.