Abprallwinkel eines Balls

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

eizdealer

Betreff: Abprallwinkel eines Balls

BeitragDo, Apr 22, 2004 10:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Ich Erstelle gerade einen Bildschirmschoner im Praktikum und will darin einen Ball an den Bildschirmseiten abprallen lassen, sodass er immer hin-und-her springt. Jetzt habe ich allerdings das Problem, dass ich es nicht schaffe, den finalen Winkel zu berechnen. Hört sich zwar beinahe schon lächerlich an, aber so ganz einfach ist es wirklich nicht.
OK - Abprallwinkel = Aufprallwinkel, aber diese Winkel sind ja relativ zur jeweiligen Wand.
Ich paste einfach mal den Code, den ich bisher habe, wobei der ziemlich Müll ist, weil ich damit ausprobiert habe. Nur dass ihr das vom Prinzip her seht, wie ich das meine.

Code: [AUSKLAPPEN]
   If EntityX(Mesh(0)) > 7 Then
      If Winkel% <= 180 Then
         AufWinkel% = 180 - Winkel%
         AbWinkel% = AufWinkel%
         Winkel% = Winkel% + 2 * AufWinkel%
      Else
         AufWinkel% = 180 - Winkel%
         AbWinkel% = AufWinkel%
         Winkel% = Winkel% - 2 * AufWinkel%
      EndIf
   EndIf
   If EntityX(Mesh(0)) < -7 Then
      If Winkel% <= 180 Then
         AufWinkel% = 270 - Winkel%
         AbWinkel% = AufWinkel%
         Winkel% = Winkel% + 2 * AufWinkel%
      Else
         AufWinkel% = 270 - Winkel%
         AbWinkel% = AufWinkel%
         Winkel% = Winkel% - 2 * AufWinkel%
      EndIf
   EndIf
   
   If EntityY(Mesh(0)) > 4 Then
      Winkel% = Winkel - (90- Winkel)
   EndIf
   If EntityY(Mesh(0)) < -4 Then
      Winkel% = Winkel - (90- Winkel)
   EndIf   
 

OJay

BeitragDo, Apr 22, 2004 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
warum so kompliziert? soll doch keine physiksimulation werden, oder? Very Happy

Code: [AUSKLAPPEN]
Graphics 640,480
SetBuffer BackBuffer()

BallX = 320
BallY = 240
BallYSpeed = 10
BallXSpeed = 10

Repeat

   BallX = BallX + BallXSpeed
   BallY = BallY + BallYSpeed

   If (BallX < 0)   BallXSpeed = 10
   If (BallX > 620) BallXSpeed = -10
   If (BallY < 0)   BallYSpeed = 10
   If (BallY > 460) BallYSpeed = -10

   Color 255,0,0
   Oval BallX, BallY, 20, 20
   
   Flip
   Cls

Until KeyHit(1)


hier wird einfach immer speed zur position addiert. geraten die koordinaten ausserhalb des screens, wird speed der jeweiligen achse invertiert, sodass der ball dann in die andere richtung fliegt. so simpel ist das...in 3d wärs dasselbe, nur halt noch eine dimension mehr...

wenn du speed noch rand(8,12) machst kannst du sogar noch etwas mehr dynamik reinbringen ^^

Markus2

BeitragFr, Apr 23, 2004 1:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie OJay schon sagt .
So wäre es noch schöner ...

If (BallX < 0) BallXSpeed = abs(BallXSpeed)
If (BallX > 620) BallXSpeed = -abs(BallXSpeed)
If (BallY < 0) BallYSpeed = abs(BallYSpeed)
If (BallY > 460) BallYSpeed = -abs(BallYSpeed)

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group