Freier Fall!
Übersicht

cleminatorBetreff: Freier Fall! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo! Ich wollte mal fragen wie ihr den Freienfall eines Kreise programmieren würdet!
Ich habs mal ganz billig gemacht!: Code: [AUSKLAPPEN] Graphics 800,600,32,1 SetBuffer BackBuffer() Global x = 800/2- 5/2 Global y = 5 Global v# Repeat Cls If MouseHit(1) Then fallen = True EndIf If fallen = True For i = 1 To 100 v = v + 0.001 Next y = y + v EndIf Rect x,y,5,5 Flip Until y > 600 bin aber nicht ganz zufrieden! Wollte mal fragen obs jemand Physik-Getreu programmiert hat! Grüße Clemens[/code] |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist schon 'fast' ok so. Was soll aber die For-Schleife da bewirken? Mach sie weg und addiere v mit einem größerem Wert! Dann mach noch y auch zu einer Float-Variable. Fertig! | ||
cleminator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gut hab ich gemacht! So jetzt hab ich noch programmiert, dass es wieder aufspickt. Das Problem: Es springt nur einmal auf! Was ist der Fehler? :
Code: [AUSKLAPPEN] Graphics 800,600,32,1 SetBuffer BackBuffer() Global x = 800/2- 5/2 Global y# = 5 Global v# = 1 Repeat Cls If MouseHit(1) Then fallen = True EndIf If fallen = True v = v + 0.1 y = y + v EndIf If y > 500 v = v/2 * (-1) EndIf Rect x,y,5,5 Flip Until KeyHit(1) End |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
spiel ein bisschen mit dem wert rum, durch den du v teilst:
Code: [AUSKLAPPEN] Graphics 800,600,32,1 SetBuffer BackBuffer() Global x = 800/2- 5/2 Global y# = 5 Global v# = 1 Const jump#=1.5 Repeat Cls If MouseHit(1) Then fallen = True EndIf If fallen = True v = v + 0.1 y = y + v EndIf If y > 500 v = v/jump# * (-1) EndIf Rect x,y,5,5 Flip Until KeyHit(1) End MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ist in folgenden Zeilen:
Code: [AUSKLAPPEN] If y > 500
v = v/2 * (-1) EndIf Du halbierst die Geschwindigkeit nach einer 'Kollisions' am Boden. Wenn v=2 und y=499.5 ist, dann passiert folgendes... y=y+v ergibt 501.5 dadurch wird die Kollisionsrechnung angeschmissen und v=-v/2 ergibt v=-1, das macht y=y+-1 ~~ y=y-1 ergibt 500.5 !!! Immer noch eine Kollision!!! Du musst also nach einr Kollision erst y auf eine Position setzen, wo es noch keine Kollision gab und dann erst eine Umrechnung machen. edit1: @5k41, das wird nicht in jeder Situation zu erwünschten Ergebnis führen. Bei einer Umpositionierung (zB Startposition der Fallposition) kann es wieder zu dem Problem führen... |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group