SchwerkraftPhysik[2D] - raff ich net

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: SchwerkraftPhysik[2D] - raff ich net

BeitragFr, Aug 03, 2007 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will sowas wie einen kleinen Schooter bauen. Und zawr hat man eine Feststehende "Festung" mit Kanone und muss den Feind besiegen.

So, jetzt will ich aber so machen ( um den Schwirigkeitslevel zu ehöhen) dass der schuss so eine Schöne Kurve Fliegt, dass heißt beim Abschuss ist die geschindigkeit sagen wir mal 2Pixel pro Schleifendurchgang, der Winkel beträgt 200°Also Zeigt ungefär in die RechteObereHälfte. so jetzt soll die geschwindigkeit um 0.001 abnehmen (hab ich schon) und die "Schwerkraft" soll das geschoss "erfassen" sprich der winkel soll sich neigen. das hab ich aba auch schon aber der winkel neigt sich immer gleich Sad

hier mal der Code für das geschütz :

Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

Type s
Field x#,y#,w#,speed#,g#
End Type

Global s.s
Global Max_y = 200

Repeat
Text 1,1,w
mx = MouseX():my = MouseY()
w = (-ATan2(mx-200,my-200)+360) Mod 360
If MouseDown(1) Then CreateS(200+Sin(-w)*50,200+Cos(-w)*50,-w,2,0.9)
Line 200,200,200+Sin(w)*50,200+Cos(w)*50
UpdateS()
Flip
Cls
Until KeyHit(1)
End

Function CreateS(x#,y#,w#,speed#,g#)
s.s = New s
s\x = x
s\y = y
s\w = w
s\g = g
s\speed = speed
End Function

Function UpdateS()
For s.s = Each s
s\x = s\x + Sin(s\w) * s\speed
s\y = s\y + Cos(s\w) * s\speed
If s\w < 360 Then s\w = s\w - s\g
Line s\x,s\y,s\x+Sin(s\w)*10,s\y+Cos(s\w)*10
If s\y > Max_y Then Delete s.s
Next
End Function


thx und mfg
Crack93 Wink
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

BladeRunner

Moderator

BeitragFr, Aug 03, 2007 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Google mal nach Wurfparabel.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Puccini

BeitragFr, Aug 03, 2007 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weis net in welcher Klasse du bist, aber wenn du etwas in Physik aufgepasst hast, solltest du das eigentlich wissen Wink

Wurfparabel gibts mit und ohne Luftwiederstand Wink also wenn du noch wind einbauen willst oder der gleichen ^^
http://de.wikipedia.org/wiki/Wurfparabel
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM
www.ragesoft.de
Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39

Eingeproggt

BeitragFr, Aug 03, 2007 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Also Schwerkraft ist nur, dass etwas mit (auf der Erde) 9,81m/s² nach unten beschleunigt wird ("nach unten" im Spiel, genauer gesagt, wird man zum Erdmittelpunkt hin beschleunigt^^). Also musst du nichts weiter tun, als die vertikale Geschwindigkeit vy#=vy+a_erde rechnen. Für a sind 9.81 ein bisschen viel... musst selber herausfinden wie es dir am besten gefällt.

Luftwiderstand ist so ne Sache.... Wenn du den unbedingt dabeihaben willst, würd ich es auch faken mit vx=vx-a_luft. Alles andere ist ein wenig zu kompliziert. (Integration,cw-Werte,...)
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

ToeB

BeitragFr, Aug 03, 2007 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke ich hab mal mit meine Vater darüber gesprochen und der hat mia dann ne Formel gegeben.

Zitat:
y = x*tan(w)-(g/(2*v²*Cos(w)2))*x²


Ich hab dass mal versucht in BB mit den Variablen umzusetzten :

Code: [AUSKLAPPEN]
Function UpdateS()
For s.s = Each s
s\x = s\x + s\speed
s\y = (x*Tan(s\w))-(grav/(2*(s\speed*s\speed)*(Cos(s\w)*Cos(s\w))))*(x*x)
Oval s\x,s\y,5,5
Next
End Function


Dass klappt aber nicht so ganz.... könnt ihr mia helfen ?

thx und mfg
Crack93 Wink

P.s. : Ich bin in der 7ten klasse (Komm jetzt in die 8te) und hab 1 1/2 jahre kein Physik mehr gehabt und als ich das noch hatte haben wir nichts mit gravitation o.ä. durchgenommen Rolling Eyes
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Puccini

BeitragFr, Aug 03, 2007 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
hier mal meine funktion, is genau das gleiche Wink und funktioniert eigentlich wunderbar!

Is allerdings jetzt für 3d, sollte aber am prinzip nix ändern Wink

Code: [AUSKLAPPEN]
                                       schuss\x0#=schuss\x0#+schuss\v0#*framespeed#
   tempy#=-(0.0981/(2*schuss\v0#^2*Cos(schuss\alpha#)^2))*schuss\x0#^2+Tan(schuss\alpha#)*schuss\x0#


bei dir könnte es daran liegen das du nur "x" schreibst und nich s\x Wink
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM
www.ragesoft.de
Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39

ToeB

BeitragFr, Aug 03, 2007 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo danke für die Formel, sieht schonmal ganz gut aus... aber dann ist die ganze yPos im Ar**h !
Code: [AUSKLAPPEN]
Function UpdateS()
For s.s = Each s
s\x = s\x + s\speed
s\y#=(grav/(2*s\speed#^2*Cos(s\w)^2))*s\x#^2+Tan(s\w)*s\x
Oval s\x,s\y,5,5
Next
End Function


da macht der die y position irgentwie nicht so wie die sein soll Sad

thx und mfg
Crack93 Wink
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Eingeproggt

BeitragFr, Aug 03, 2007 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab meinen Vorschlag gemacht. Wenn er dich nicht interessiert, ist das dein Problem...
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Puccini

BeitragFr, Aug 03, 2007 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab das so noch gemacht:

Code: [AUSKLAPPEN]
                     PositionEntity schuss\mesh,EntityX(schuss\mesh),schuss\y0+tempy#,EntityZ(schuss\mesh)            


das schuss\y0 is dann quasi die starty-position die du noch beim erstellen des schusses mit übergebund musst.

wenn du jetzt nur die erste formel genutzt hast is das klar das das y "falsch" dargestellt wird. da ja das y dann nur die veränderung wiedergibt. Wink viel erfolg beim testen
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM
www.ragesoft.de
Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39

ToeB

BeitragFr, Aug 03, 2007 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
jo dankee Very Happy


@Eingeproggt:
Ja Hat mich interressiert, aber diese lösung hatte ich auch schon vorher und es ist keine WurfFunction (sieht nicht so aus wie ein Wurf)

Wink

thx und mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Aug 03, 2007 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähm, ja Leute. Wurfparabel ist zwar richtig, wenn es um die Berechnung von Flugkörpern geht, hat aber in der Spieleentwicklung nichts zu suchen. Wenn jedes Spiel seine Flugkörper über solche Formeln berechnen würde, so würde jedes dieser Spiele ganz schön zum ruckeln kommen können.

Ich will das mal so ausdrücken. Die Formel der Wurfparabel kann man nutzen, wenn man den Zeitpunkt beliebig setzen will um dann die Position eines Körpers auszurechnen. Da ein Spiel aber in seiner Zeit Linear berechnet wird. Also nicht mal in der Zukunft dann in der Vergangenheit um dann wieder in der Gegenwart ewas auszurechnen, ist diese ganze Formel quatsch für ein Spiel.

Man nehme eine Positionsvariable, bei 3D geht auch EntityX/Y/Z und eine Geschwindigkeitsvariable. Die Geschwindigketisvariable kann nicht durch etwas anderes wie bei der Position ersetzt werden. Setzt man nun ein Geschwindigkeitsvektor bei Abschuss fest, dann fliegt das Ding schon ganz automatisch in der vorgegebenen Richtung. Wird nun die Y-Geschwindigkeitsvariable ständig veringert, so hat man bereits eine Schwerkraft erzeugt. Die Zahl von 9,81 hat auch hier nichts zu suchen, da zum einen die Grössenverhältbnisse im Spiel meisten nicht der Realität übereinstimmen, aber auch eine absolut realistische Bewegung in den meisten Fällen zu schnell wäre.

Will man nun noch ein Luftwiederstand, so teilt man alls Geschwindigkeitsvariablen durch eine kleine Zahl die aber größer als 1 ist. Besser ist hier *.995 oder so, da Multiplikation schneller berechnet werden, aber letztendlich das gleiche tun kann.

Funktionen wie Sin/Cos oder gar Tan haben nur bei der Erstellung eines neuen Flugkörpers was zu suchen und nicht mehr bei der Flugbahn selbst.

Der einzige Grund, warum man tatsächlich eine Wurfparabel im Spiel nutzen könnte, ist die, wenn eine KI mit Projektilen schiessen muss.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

ToeB

BeitragFr, Aug 03, 2007 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
@hectic :

Danke ! Very Happy jetzt siehts cool aus ^^

Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

Type s
Field x#,y#,w#,sx#,sy#
End Type

Type k
Field x,y,w
End Type

Global s.s
Global k.k
Global Max_y = 200
Global grav# = 0.01
Global mx,my

Global Kanonen_img = LoadAnimImage("gfx\Kanone 1.bmp",10,100,0,2)
MaskImage Kanonen_img,255,0,255
MidHandle Kanonen_img

Global G = LoadImage("gfx\Gehäuse.bmp")
MaskImage G,255,0,255
MidHandle G

Dim KAN(360)

For i = 0 To 360
KAN(i) = CopyImage(Kanonen_img)
RotateImage(KAN(i),i)
Next

k.k = New k
k\x = 200
k\y = 200
k\w = 0

Repeat
Text 1,1,w
mx = MouseX():my = MouseY()
Update()
Flip
Cls
Until KeyHit(1)
End

Function CreateS(x#,y#,w#,speed#,sy#)
s.s = New s
s\x = x
s\y = y
s\w = w
s\sx= speed
s\sy = sy
End Function

Function Update()
For k.k = Each k
k\w = (-ATan2(mx-k\x,my-k\y)+360) Mod 360
If MouseDown(1) Then
DrawImage KAN(k\w),k\x,k\y,1
CreateS(k\x+Sin(-k\w)*50,k\y+Cos(-k\w)*50,-k\w,2,2)
Else
DrawImage KAN(k\w),k\x,k\y,0
EndIf
DrawImage G,k\x,k\y
Next
For s.s = Each s
s\sy = s\sy - grav
s\x = s\x + Sin(s\w) * s\sx
s\y = s\y + Cos(s\w) * s\sy
Oval s\x,s\y,5,5
Next
End Function


Danke und mfg Wink
Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group