problem mit ball zeichnen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Toudy

Betreff: problem mit ball zeichnen

BeitragMo, Mai 22, 2006 23:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute,

spiel grad ein bisschen mit einfacher ballphysik rum. Hab damit nur ein Problem.
Wenn der ball gegen den rechten bildschirmrand hüpft soll er einfach abprallen und in die andere Richtung weiterhüpfen. Wenn er nun abprallt wird der Ball plötzlich 200 Pixel zu weit links gezeichnet und hüpft ab dort ganz normal weiter.

Code: [AUSKLAPPEN]

Global xmax=1024, ymax=600

Graphics xmax, ymax, 32, 2
SetBuffer BackBuffer()

Global frametimer=CreateTimer(100)
SeedRnd MilliSecs()

Global start = 100   ;Anfang des hüpfens
Global t# = 0.1      ;Zeit für die Formel
Global winkel = 45
Global speed# = 60   
Global way   ;weg

Global boden = LoadImage("Floor.bmp")
MidHandle boden

Global ball = LoadImage("Kugel.bmp")
MidHandle ball
Global kugelXpos# = 120, kugelYpos# = ymax-30

Repeat

   WaitTimer (frametimer)
   
   Cls
   
   DrawImage boden, 40, ymax-10         ;Boden zeichnen
   For i=1 To 13
      DrawImage boden, i*80+40, ymax-10   ;Kugel zeichnen
   Next
   
   DrawImage ball, kugelXpos#, kugelYpos#   
   way = (speed# * t# * Cos(winkel))   ;Berechnung der Wurfparabel(X-Komponente)
        kugelXpos# = start+way
   kugelYpos# = ballheight#-(speed# * t# * Sin(winkel) - 0.5 * 10 * (t# * t#)) ;Berechnung der Wurfparabel(Y-komponente)
   t# = t# + 0.1   ;ablaufgeschwindigkeit wählen

   Text 50, 100, "Kugel X: " + kugelXpos# + " Y: " + kugelYpos#
   Text 50, 150, "Winkel: " + winkel
   Text 50, 200, "Start " + start
      
   If kugelYpos#>570 Then      ;Wenn kugel Boden berührt
      t# = 0.1            ;Funktion von vorne Berechnen
      start = kugelXpos#      ;Aufprallpunkt der Kugel speichern
   EndIf
   
   If kugelXpos#>xmax Then    ;Wenn Kugel rechte seite berührt
      WaitKey()
      winkel = 180-winkel      ;Einfallswinkel gleich ausfallswinkel
      way = way * (-1)      ;Richtung umkehren
      start = kugelXpos#      
   EndIf
         
   Flip
   
Until KeyHit(1)
End
   


meine frage ist jetzt: Warum macht er nicht am bildschirmrand (Also bei x=1024) mit der berechnung der kugelbahn weiter, sonder so bei etwa x=800?
Vielleicht könnt ihr mir ja helfen. ICh seh den Fehler einfach nicht.

P.S: Sorry für die schlechte formatierung, is schon spät Rolling Eyes . Und kritik am code an sich ist auch erwünscht. Bin ja noch absoluter BB neuling und kann von daher bestimmt noch was lernen.

Mr.Hyde

Newsposter

BeitragMo, Mai 22, 2006 23:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ich jetzt nur auf den ersten Blick sehe ist, dass du way=... zweimal berechnest. Das zweite mal gibt den nötigen Umkerwert aus, aber ich glaube dahin kommt es gar nicht, da vorher durch das erste die Kugel versetzt wird.
BBP News RSS | Chaos Interactive | Watanien 2 Screens, Infos und Download | Watanien 2 Worklog | PuzzleMasters
http://abgeordnetenwatch.de - http://www.regierungs-beratung.de - Der Regierung auf die Finger schauen
 

Toudy

BeitragDi, Mai 23, 2006 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
@mr Hyde:
Danke für die Antwort.
Aber dahin kommt es schon, wenn der ball den rechten bildschirmrand berührt hüpft er ja in die andere Richtung weiter, nur eben um etwa 200 pixel nach links versetz, anstatt am bildschirmrand weiterzumachen.
 

Holloway

BeitragMo, Mai 29, 2006 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Also dein way=way * (-1) is iwie wirklich sinnlos, weil beim naechsten schleifendurchlauf wird der wert wieder mit der Berechnung der X-Komponente ueberschrieben und du hast den wert davor nicht benutzt

und die verschiebung kommt glaub ich wegen dem kugelXpos# = start+way
wenn du die wayberechnung ma mitn paar werten durchrechnest z.b.
speed = 60
time = 2
winkel = 135 (war voher z.b. 45)
dann biste schon bei ca. -85 und da ich denke das time noch viel hoeher is dann kommt das mit den 200 schon hin ; )

gruss
Stay Heavy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group