Ballphysik

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

Mogon

Betreff: Ballphysik

BeitragDo, Feb 24, 2005 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Findet Ihr das realistisch?

Und bevor alle meckern: In der BB-Demo funzt es nicht ?! Ich hab BP 1.4 und da gehts.

Code: [AUSKLAPPEN]
Graphics 1024,768

Global x# = 400
Global y# = 300

Global speedx# = 2
Global speedy# = 2

Global clear = 1

Global anzeige = 1

timer = CreateTimer(400)

Repeat
   SetBuffer BackBuffer()
   If clear = 1 Then Cls
   WaitTimer timer
         
      Oval x,y,20,20
      
      If KeyHit(199) Then
         Select clear
            Case 1 clear = 0
            Case 0 clear = 1
         End select
      EndIf
      
      If KeyHit(200) Then
         If speedx <= 0 Then speedx=speedx-1
         If speedx >= 0 Then speedx=speedx+1
      EndIf
      
      If KeyHit(208) Then
         If speedx <= 0 Then speedx=speedx+1
         If speedx >= 0 Then speedx=speedx-1
      EndIf
      
      If KeyHit(203) Then
         If speedy <= 0 Then speedy=speedy-1
         If speedy >= 0 Then speedy=speedy+1
      EndIf
      
      If KeyHit(205) Then
         If speedy <= 0 Then speedy=speedy+1
         If speedy >= 0 Then speedy=speedy-1
      EndIf

      x = x + speedx
      y = y + speedy

      If speedy < 0 Then speedy = speedy+0.03
      If speedy > 0 Then speedy = speedy+0.02
      
      If speedx < 0 Then speedx = speedx+0.0005
      If speedx > 0 Then speedx = speedx-0.0005      
      
      
      
      
      If x < 0 Then speedx=speedx*-1
      If x > 1004 Then speedx=speedx*-1
      
      If y < 0 Then speedy=speedy*-1
      If y > 748 Then speedy=speedy*-1
      
   Flip
Until KeyHit(1)

Spikespine

BeitragDo, Feb 24, 2005 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Also für den Luftwiderstand darfst du meines Wissens nach nichts abziehen, sondern dividieren (z.B. durch 1.1), da er bei höheren Geschwindigkeiten noch stärker zunimmt.
Dann könntest du noch die Speed reduzieren, wenn der Ball auf den Boden prallt.

Edit: wenn ich mir den Code näher ansehe:
warum sind hier
Code: [AUSKLAPPEN]
If speedy < 0 Then speedy = speedy+0.03
If speedy > 0 Then speedy = speedy+0.02

zwei unterschiedliche Werte? Die Gravitation ist doch immer gleich!

und:
Code: [AUSKLAPPEN]
     
      If KeyHit(200) Then
         If speedx <= 0 Then speedx=speedx-1
         If speedx >= 0 Then speedx=speedx+1
      EndIf
     
      If KeyHit(208) Then
         If speedx <= 0 Then speedx=speedx+1
         If speedx >= 0 Then speedx=speedx-1
      EndIf

kann man einfacher so schreiben
Code: [AUSKLAPPEN]
     
If KeyHit(200) Or KeyHit(208) Then speedx = speedx + Sgn(Speedx)


mfg Spike
  • Zuletzt bearbeitet von Spikespine am Do, Feb 24, 2005 19:00, insgesamt einmal bearbeitet

Artemis

BeitragDo, Feb 24, 2005 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie schon Beginnerforum gesagt:
Die Tasten sind vertauschT!!!

Mr.Keks

BeitragDo, Feb 24, 2005 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
      speedy = speedy*.999+.2 ; gravitation
      speedx = speedx*.999+.01 ; wind
       
     
       
      If x < 0 Then x = 0 speedx=speedx*-.8
      If x > 1004 Then x = 1004 speedx=speedx*-.8
       
      If y < 0 Then y = 0 speedy=speedy*-.8
      If y > 748 Then y = 748 speedy=speedy*-.8
finde ich besser
MrKeks.net
 

Mogon

BeitragDo, Feb 24, 2005 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
@ SHAKESPINE: So Advantage wie WInd oder Luftwiederstand habe ich noch gar nicht eingeplant Embarassed , aber vielen Dank für SGN(...) - das kannte ich noch gar nicht (bin nochn Anfänger Laughing )

Das mit dem +0.03 und dem +0.02: Wenn beide Werte gleich sind, würde der Ball immer gleich hoch springen und nicht schneller werden, wenn er fällt.

@ JonasCleve: Ich bin halt viel zu faul, auf solche Sachen zu achten 8) Laughing

Spikespine

BeitragDo, Feb 24, 2005 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Das mit dem +0.03 und dem +0.02: Wenn beide Werte gleich sind, würde der Ball immer gleich hoch springen und nicht schneller werden, wenn er fällt.


Ich würde jedoch immer noch sagen, dass es physikalisch nicht ganz korrekt ist. Anstattdessen würde ich in die Boden-Aufprall-Abfrage so machen:
Code: [AUSKLAPPEN]
      If y > 748 Then
         y = 748
        speedy=(speedy*-1)/1.4
      EndIf


[edit] halt so wie das von inarie, ist im Prinzip das gleiche!

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group