Ballflugbahn-Programm

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

carliman

Betreff: Ballflugbahn-Programm

BeitragMo, Feb 06, 2012 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Kann mir vielleicht irgendjemand mal ein
Programm für eine Ballflugbahn ins forum tun?
Ich würd nähmlich gern ein Ballspiel Programmiern.
Ich hab schon auf Wikipedia geguckt, aber da steht nur so ne ganz komplizierte Rechnung.
Ich hoffe mir kann jemand Helfen.

Carliman

Xeres

Moderator

BeitragMo, Feb 06, 2012 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du im Forum nach "Parabel" oder "Flugbahn" suchst, solltest du fündig werden. Ansonsten lernst du mehr, wenn du es selbst einfach mal ausprobierst.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

konstantin

BeitragMo, Feb 06, 2012 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Strecke, die ein Gegenstand zuruecklegt (wenn man die Gravitationskraft isoliert betrachtet), laesst sich als s = 0,5 * g * t^2 beschreiben, wobei g die Erdbeschleunigung ist. Diese kannst du in deinem Spiel so variieren, dass ein fuer dich passender Wert dabei heraus kommt.

Propellator

BeitragMo, Feb 06, 2012 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich sollte man in jeder Formelsammlung fündig werden.
s = Strecke
s0 = Anfangsstrecke
v0 = Anfangsgeschwindigkeit
t = Zeit
a = Beschleunigung
(Eigentlich brauchst du nur den letzten Summanden)
s = s0 + v0*t + 1/2*a*t^2

Das ganze mit Vektoren kombinieren und voila.

d.h. x = 1/2 * a * t^2 und y = 1/2 * g * t^2
g ist 9.81 m/s^2
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

BladeRunner

Moderator

BeitragMo, Feb 06, 2012 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Die komplizierte Rechnung aus der Wikipedia ist die hinter einem Ballwurf liegende Mathematik. Ich weiß nicht ob Du die Thematik in der Schule schon hattest (ich denke eher nein) aber Du wirst dich mit der Wurfparabel auseinandersetzen müssen wenn Du gute Ergebnisse willst.
Welchen Teil der Formel verstehst Du nicht? Je genauer Du fragst um so genauer kann man dir helfen.
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

ZEVS

BeitragMo, Feb 06, 2012 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Du wirst dich mit der Wurfparabel auseinandersetzen müssen,* wenn Du gute Ergebnisse willst.

Vektoren tun es auch, ich finde es einfacher und flexibler (Wind etc.). Die Bewegung des Balles lässt sich nach Newton in einem Vektor ausdrücken (war bei mir 8. Klasse), dem permanent ein Gravitationsvektor hinzugefügt wird.

ZEVS
* Komma eingefügt

darth

BeitragMo, Feb 06, 2012 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Vektoren sind immer cool. Es gilt generell v = a * t und s = v * t. Was du brauchst ist eine Aufspaltung der Bewegung in X- und Y-Richtung, sonst musst du dich mit Sinussen und Cosinussen herumschlagen (und das will niemand..).

Hier:
BlitzBasic: [AUSKLAPPEN]
Const GRAV_Y# = 9.81
Const FR# = 0.99

Const TIMESTEP# = 0.1

Type Ball
Field x#
Field y#

Field vX#
Field vY#

Field aX#
Field aY#
End Type

Function newBall.Ball(x#, y#)
Local b.Ball = New Ball

b\x = x
b\y = y

Return b
End Function

Function addAcc(b.Ball, x#, y#)
b\aX = x
b\aY = y
End Function

Function update()
Local b.Ball

For b = Each Ball
b\vX = b\vX + b\aX * TIMESTEP
b\vY = b\vY + (b\aY + GRAV_Y) * TIMESTEP

b\vX = b\vX * FR

b\x = b\x + b\vX * TIMESTEP
b\y = b\y + b\vY * TIMESTEP

b\aX = 0
b\aY = 0

If b\x < 0
b\x = 0
ElseIf b\x > GraphicsWidth()
b\x = GraphicsWidth()
EndIf

If b\y > 500
b\y = 500

b\vY = 0
EndIf
Next
End Function

Graphics 800, 600, 0, 2
SetBuffer BackBuffer()
Local timer = CreateTimer(60)

Local b.Ball = newBall(10, 500)
Local mbl.Ball

While Not KeyHit(1)
Text 10, 10, "Klick auf den Ball und zieh, dann lass los \o/"

update()

For b = Each Ball
Oval b\x - 8, b\y - 8, 16, 16
Next

If MouseDown(1)
If mbl = Null
For b = Each Ball
Local dx# = MouseX() - b\x
Local dy# = MouseY() - b\y

Local d# = Sqr(dx * dx + dy * dy)

If d < 8
mbl = b

Exit
EndIf
Next
Else
Line mbl\x, mbl\y, MouseX(), MouseY()
EndIf
Else
If mbl <> Null
addAcc(mbl, MouseX() - mbl\x, MouseY() - mbl\y)
EndIf

mbl = Null
EndIf

Flip 0
WaitTimer(timer)
Cls
Wend
End


Oder noch viel cooler, mit Verlet:
BlitzBasic: [AUSKLAPPEN]
Const GRAV_Y# = 9.81
Const FR# = 0.99

Const TIMESTEP# = 0.1

Type Ball
Field x#
Field y#

Field oldX#
Field oldY#

Field aX#
Field aY#
End Type

Function newBall.Ball(x#, y#)
Local b.Ball = New Ball

b\x = x
b\y = y

b\oldX = x
b\oldY = y

Return b
End Function

Function addAcc(b.Ball, x#, y#)
b\aX = x
b\aY = y
End Function

Function update()
Local b.Ball

Local tmpX#, tmpY#

For b = Each Ball
tmpX = b\x
tmpY = b\y

b\x = 2 * b\x - b\oldX + b\aX * TIMESTEP * TIMESTEP
b\y = 2 * b\y - b\oldY + (b\aY + GRAV_Y) * TIMESTEP * TIMESTEP

b\oldX = tmpX - (tmpX - b\x) * (1 - FR)
b\oldY = tmpY

b\aX = 0
b\aY = 0

If b\x < 0
b\x = 0
ElseIf b\x > GraphicsWidth()
b\x = GraphicsWidth()
EndIf

If b\y > 500
b\y = 500
EndIf
Next
End Function

Graphics 800, 600, 0, 2
SetBuffer BackBuffer()
Local timer = CreateTimer(60)

Local b.Ball = newBall(10, 500)
Local mbl.Ball

While Not KeyHit(1)
update()

For b = Each Ball
Oval b\x - 8, b\y - 8, 16, 16
Next

If MouseDown(1)
If mbl = Null
For b = Each Ball
Local dx# = MouseX() - b\x
Local dy# = MouseY() - b\y

Local d# = Sqr(dx * dx + dy * dy)

If d < 8
mbl = b

Exit
EndIf
Next
Else
Line mbl\x, mbl\y, MouseX(), MouseY()
EndIf
Else
If mbl <> Null
addAcc(mbl, MouseX() - mbl\x, MouseY() - mbl\y)
EndIf

mbl = Null
EndIf

Flip 0
WaitTimer(timer)
Cls
Wend
End


FOR VECTRON \o/
Diese Signatur ist leer.

Chester

BeitragMo, Feb 06, 2012 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich muss hier aber auch mal ein bisschen widersprechen. Und zwar ist es eigentlich gar nicht wichtig, dass es physikalisch möglichst genau berechnet wird. Rein theoretisch kommt es ja nur drauf an, dass der Betrachter denkt, dass es so physikalisch stimmen muss. Was ich damit sagen will, oftmals hilft es mehr sich zu überlegen, wie es aussehen muss, und nicht wie man es physikalisch beschreiben kann. Natürlich sollte man Grundlagen aus der Physik beherrschen. Aber oft reichen auch schon ein paar einfache Sachen aus.

Folgendes Beispiel. Hier werden zwar grundsätzliche physikalische Sachen eingehalten. Aber Physiker würden das als herzlich armselig bezeichnen. Aber es sieht halbwegs überzeugend aus.

BlitzBasic: [AUSKLAPPEN]
Graphics 600, 480, 32,2


SetBuffer BackBuffer()

KreisX = 400
KreisY = 300
Kraft = 30
RichtungX# = 5
RichtungY# = 2

Schwerkraft# = 0.981
Energieverlust# = 0.2
timer=CreateTimer(60)

Repeat
Cls
WaitTimer(timer)


Rect 10,10,580,460,0
kreisx = kreisx + richtungx
kreisy = kreisy + richtungy


If kreisx > 580 Then richtungx = -richtungx
If kreisx < 10 Then richtungx = - richtungx
If kreisy > 460 Then
kreisy = 460
richtungy = - richtungy*(1-Energieverlust)
richtungx = richtungx * (1-energieverlust)
If richtungy# < 0.01 And richtungy# >-0.01 Then richtungy = 0
EndIf
If kreisy < 10 Then richtungy = - richtungy

Oval kreisx-15,kreisy-15,30,30,1
Oval MouseX()-4, MouseY()-4,8,8,0

Abstand# = Sqr((MouseX()-kreisx)^2 + (MouseY()-kreisy)^2)

Winkel#=ATan2(kreisy-MouseY(),kreisx-MouseX())

If MouseHit(1)
richtungy = -Sin(Winkel)*Kraft
richtungx = -Cos(Winkel)*Kraft
EndIf

Text 0,0, "Winkel: "+winkel

Line MouseX(),MouseY(),kreisx,kreisy
richtungy = richtungy + schwerkraft

Flip
Until KeyHit(1)

Vertex

BeitragDi, Feb 07, 2012 13:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hatte dazu auch ein Topic angefangen: https://www.blitzforum.de/foru...hp?t=36490
Ganz am Ende findest Du ein Code, der einen Basketball mit einer gegebenen Masse simuliert. Dabei wirkt anfangs eine Stoßkraft und die Gravitationskraft auf ihn ein.
vertex.dreamfall.at | GitHub

PSY

BeitragMi, Feb 08, 2012 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
s0 = Anfangsstrecke
d.h. x = 1/2 * a * t^2 und y = 1/2 * g * t^2

Anfangsstrecke ??? ^^
Und die Formel fuer x ist falsch. Bei einem Ballwurf gibts keine Beschleunigung in x Richtung. Eventuell wirkt ne Windkraft, das ist aber schon alles. t^2 in x-Richtung ist definitiv falsch.

Der schiefe Wurf an sich ist eigentlich gar nicht schwer. Ich versuchs mal so leicht wie moeglich zu erklaeren:

GRUNDVERSTAENDNIS:

Ein geworfener Koerper fuehrt 3 Bewegungen unabhaengig voneinander aus:
1. Eine geradlinig-gleichfoermige Bewegung in Richtung der positiven x-Achse mit der Geschwindigkeit
vx = v0 * cos(Abwurfwinkel)

2. Eine geradlinig-gleichfoermige Bewegung in Richtung der positiven y-Achse (AUFWAERTS) mit der Geschwindigkeit
vy(1) = v0 * sin(Abwurfwinkel)

3. Einen freien Fall in Richtung der negativen y-Achse (ABWAERTS). Hier greifen die Gesetze des FREIEN FALLS.
vy(2) = -g * t
s = -0.5 * g * t * t


2. + 3. kann man vereinfachen zu einer Formel fuer die y-Richtung:
vy = vy(1) + vy(2) = v0 * sin (Abwurfwinkel) - g * t


DARAUS FOLGT DAS WEG-ZEIT-GESETZ: (Also das was Du fuer dein Programm brauchst)
x = vx * t = v0 * cos(Abwurfwinkel) * t
y = v0 * sin(Abwurfwinkel) * t - 0.5 * g * t * t


Die 2 Formeln fuer Blitz3D lauten dann also wie folgt:
Code: [AUSKLAPPEN]
x=v0*Cos(winkel)*t
y=v0*Sin(winkel)*t-(0.5*g*t*t)



Hier mal ein einfacher Beispielcode: (mit Cursortasten V0 und Winkel veraendern)
Code: [AUSKLAPPEN]
Graphics 1024,768,0,2
SetBuffer BackBuffer()

Local timer%=CreateTimer(100)
Local startx#=50.0, starty#=700.0, v0#=90.0, winkel#=45.0, g#=9.81, t#=0.0, x#, y#
Local starttime%=MilliSecs(), time%

Repeat
   
   ; RESET WENN BALL AUSSERHALB BILDSCHIRM
   If x>1024 Or y>768 Then x=startx : y=starty : starttime=MilliSecs()
   
   ; USEREINGABE WINKEL UND ANFANGSGESCHWINDIGKEIT V0
   winkel = winkel + (KeyDown(200)-KeyDown(208))*.1
   v0=v0 + (KeyDown(205)-KeyDown(203))*.1
   If v0<0 Then v0=0
   If v0>200 Then v0=200
   If winkel < 0 Then winkel = 0
   If winkel>90 Then winkel = 90
   
   ; WEG-ZEIT-GESETZ FUER X UND Y
   x=startx+v0*Cos(winkel)*t
    y=starty-(v0*Sin(winkel)*t-(0.5*g*t*t))
   
   ; BERECHNE VERGANGENE ZEIT
   time=MilliSecs()
   t=(time-starttime)/100.0
   
   ; GRAFIKAUSGABE
   Text 0,0, "WINKEL   :  " + winkel
   Text 0,20,"V0       :  " + v0
   Text 200,0, "CURSORTASTEN:   AENDERUNG WINKEL + V0"
   Color 255,0,0
   Rect 0,700,1024,5,True
   Color 255,255,255
   Oval x,y,10,10,True
   
   WaitTimer (timer)
   Flip 0
   Cls
   
Until KeyDown(1)
End



L8er,
PSY
PSY LABS Games
Coders don't die, they just gosub without return

Propellator

BeitragMi, Feb 08, 2012 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Anfangsstrecke ??? ^^

Die Strecke, bei der man startet.

Zitat:
Und die Formel fuer x ist falsch. Bei einem Ballwurf gibts keine Beschleunigung in x Richtung. Eventuell wirkt ne Windkraft, das ist aber schon alles. t^2 in x-Richtung ist definitiv falsch.

Bullshit. Die Formel ist nicht "falsch", a ist einfach 0 wenn es keine Beschleunigung gibt. Das hätte man sich aber auch ableiten können, in dem man einfach mal das * beachtet hätte.

Der schiefe Wurf, den du präsentierst, gilt aber nur für Objekte die keine Äusseren Einwirkungen mehr haben, sollten sie es doch haben muss man dann doch wieder Vektoren benutzen.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

PSY

BeitragMi, Feb 08, 2012 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
bull ^^
Zitat:
d.h. x = 1/2 * a * t^2


wenn es keine beschleunigung gibt und a=0 ist dann ist x = 0 laut deiner formel

wenn du's anders meinst, ist es definitiv falsch ausgedrueckt. und er kanns so sicher nicht in seinen code umsetzen.

Zitat:
Programm für eine Ballflugbahn ins forum tun?
Ich würd nähmlich gern ein Ballspiel Programmiern.

es geht hier grundlegend um einen ballwurf...

und aeussere einfluesse kann man auch ohne vektoren mit einbinden...
l8er,
PSY
PSY LABS Games
Coders don't die, they just gosub without return

Propellator

BeitragMi, Feb 08, 2012 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
wenn es keine beschleunigung gibt und a=0 ist dann ist x = 0 laut deiner formel

Gratulation, genau was ich gesagt habe. Das Problem ist nur, dass man eventuell äussere Einflüsse haben will.

Zitat:
es geht hier grundlegend um einen ballwurf...

Seltsam, im Zitat von dir stand nirgends "Ballwurf".

Zitat:
und aeussere einfluesse kann man auch ohne vektoren mit einbinden...

Ja, wenn man unnötig kompliziertes gefrickel mag. Vektoren sind um einiges einfacher, wenn es um Kollisionen etc. geht.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

PSY

BeitragMi, Feb 08, 2012 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Gratulation, genau was ich gesagt habe. Das Problem ist nur, dass man eventuell äussere Einflüsse haben will.

DANKE Very Happy
Erstens mal, kein Grund sarkastisch zu werden. Aber ok, lass ich mich mal auf Dein Niveau hier herab. Zweitens, er benutzt Deine Formeln, weiss gar nicht um was es geht, nix funktioniert und es kommen keine gescheiten Werte raus.
Irgendwelche Formeln googlen und jemandem vor die Fuesse knallen kann jeder. Bloed nur, dass er damit ueberhaupt nix anfangen kann. Siehe sein erstes Post. "...komplizierte Formeln".
Ein bischen Erklaerung waere also angebracht gewesen.

Zitat:
Seltsam, im Zitat von dir stand nirgends "Ballwurf".

Seltsam...tatsaechlich. Was hat das mit meinem Zitat zu tun? In carliman's erstem Post steht:
Zitat:
Programm für eine Ballflugbahn ins forum tun?
Ich würd nähmlich gern ein Ballspiel Programmiern.

Darauf war das bezogen. Ballflugbahn + Ballspiel ---> Ballwurf vielleicht???


Zitat:
Ja, wenn man unnötig kompliziertes gefrickel mag. Vektoren sind um einiges einfacher, wenn es um Kollisionen etc. geht.

Wenn man Vektorrechnung kann, ja. Um einiges, ja. Aber was er wollte ist (wer Lesen kann ist ganz klar im Vorteil) ... "EIN PROGRAMM FUER EINE BALLFLUGBAHN"
Und das hab ich ihm gegeben. Eine simple Flugbahn ohne irgendwelche Einfluesse. Die ganze Vektorrechnung nuetzt wenig, wenn die Grundlagen des schiefen Wurfs unklar sind. Wenn er die verstanden hat und noch ein paar Einfluesse mehr reinbringen will, sind Vektoren ganz klar die naechste Wahl.

Aber da jetzt sowieso von Dir nur wieder ein weiterer Dizz kommt, weil Du ja sowieso alles besser weisst, ist das mein letzter Post zu diesem Topic. Den Code hat er ja nun ^^

L8er,
PSY
PSY LABS Games
Coders don't die, they just gosub without return

ZEVS

BeitragMi, Feb 08, 2012 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Aber da jetzt sowieso von Dir nur wieder ein weiterer Dizz kommt [an Propellator]

Überraschung!
Hmm... was ist komplizierter:
Zitat:
x = vx * t = v0 * cos(Abwurfwinkel) * t
y = v0 * sin(Abwurfwinkel) * t - 0.5 * g * t * t

oder
Zitat:
x = x + vx
y = y + vy
vy = vy + Gravitation
?
Ich tendiere auf letzteres, wenn PSY hier Probleme hat, seine Sache, wenn er meint carliman hätte welche, ihn lieber erstmal das bestätigen lassen (wie gesagt, das hatte ich in der 8. Klasse).
Flexibler ist in jedem Fall die Vektorvariante, schneller (Rechenzeit) auch. Dies sind vielleicht Randaspekte, aber erwähnenswert.

ZEVS

Xeres

Moderator

BeitragMi, Feb 08, 2012 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde es auch bevorzugen, wenn ihr zivilisiert bleibt... Zumal carliman sich nicht weiter geäußert hat und das Interpretieren seiner Interessen überflüssig ist.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

carliman

BeitragDo, Apr 12, 2012 11:43
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry dass ich nicht zurückgeschrieben hab.
Mir ist das alles noch ein bisschen zu kompliziert.
Ich bin erst in der 6. Klasse Sad

Midimaster

BeitragDo, Apr 12, 2012 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Da gibt es auch deutlich einfachere Lösungen...

da kann ich dir helfen, aber beschreibe davor mal genau...

... welche Sichten (von oben, von der Seite, etc...)du benötigst.

... ob es 2D oder 3D sein soll.

.... ein Ball, ein Schläger oder viele Spieler (wie Fußball).

.... was ist das Ziel deines Programmes.

Je mehr du schreibst, desto einfacher kann eine Lösung erstellt werden.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

carliman

BeitragDo, Apr 12, 2012 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde gerne eine ansicht von der Seite in 2d machen.
Es soll der ball von einem Spieler geschlagen werden. (mehr kann man ja später noch hinzufügen)
Ich will Faustball programmieren(das ist so ähnlich wie volleyball also auch mit schlägen).

ich hoffe es gibt eine einfache lösung Smile

Midimaster

BeitragFr, Apr 13, 2012 3:28
Antworten mit Zitat
Benutzer-Profile anzeigen
So, hier kommt nun eine Erklärung in 3 Teilen. Bitte probiere erst Beispiel 1 aus und versuch es zu verstehen, bevor du dir Beispiel 2 reinziehst. Du kannst auch mit dem Wert Gravi# experimentieren. 0.1 fühlt sich dabei so an , wie auf unserer Erde.


1. Der freie Fall

Ein Ball wird, wenn man ihn irgendwo in der Luft loslässt durch die Erdadanziehung runtergezogen:
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600
SetBuffer BackBuffer()

BallY#=100
SpeedY#=0
Gravi#=0.1

Repeat
Cls

SpeedY=SpeedY+Gravi
BallY = BallY+SpeedY

Oval 400, BallY,11,11
Flip 1
Until KeyHit(1)


Die Anziehung Gravi# wirkt dabei nicht direkt auf seine Position BallY#, sondern auf seine Fallgeschwindigkeit SpeedY#. Die Fallgeschwindigkeit SpeedY# wird so ständig größer:BlitzBasic: [AUSKLAPPEN]
	SpeedY=SpeedY+Gravi


Erst diese Fallgeschwindigkeit verändert nun die Position des Balls:
BlitzBasic: [AUSKLAPPEN]
	BallY = BallY+SpeedY




2. Ein Hinderniss

Trifft der Ball nun auf eine Hinderniss, z.b. auf den Boden oder auf eine "Spielerhand", so ändert er schlagartig seine Richtung:
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600
SetBuffer BackBuffer()

BallY#=100
SpeedY#=0
Gravi#=0.1
BodenY#=400

Repeat
Cls

SpeedY=SpeedY+Gravi
BallY = BallY+SpeedY

If BallY>BodenY Then
SpeedY = -SpeedY *0.8
BallY=BodenY
EndIf

Oval 400, BallY-11,11,11
Line 0,BodenY,800,BodenY
Flip 1
Until KeyHit(1)


Entscheidend sind diese 3 Zeilen:
BlitzBasic: [AUSKLAPPEN]
	If BallY>BodenY Then
SpeedY = -SpeedY * 0.8
BallY=BodenY
EndIf

Wenn BallY# den BodenY# berührt, wird die SpeedY# umgedreht. Gleichzeitig "verliert" er etwas an Energie. Hier durch die 0.8 dargestellt. Der neue "Startpunkt" für den Ball ist der BodenY#

Hinweis:
Diese Zeile hat sich etwas geändert, damit der Radius des Balls beim Zeichnen berücksichtigt wird:
BlitzBasic: [AUSKLAPPEN]
	Oval 400, BallY-11,11,11



3. Seitliche Bewegung

Nun werden die gleichen Wirkungen auch für die seitliche Bewegung BallX# eingeführt. Statt der Erdanziehung Gravi#, wirkt hier eigentlich nur ein Luftwiderstand. Seine Wirkung ist viel weniger zu spüren, deshalb können wir darauf verzichten.

BlitzBasic: [AUSKLAPPEN]
Graphics 800,600
SetBuffer BackBuffer()

BallY#=100
BallX#=100
SpeedY#=0
SpeedX#=5
Gravi#=0.1
BodenY#=400
WandX#=700

Repeat
Cls

SpeedY=SpeedY+Gravi
BallY = BallY+SpeedY

BallX=BallX+SpeedX

If BallY>BodenY Then
SpeedY=-SpeedY * 0.8
BallY=BodenY
EndIf

If BallX>WandX Then
SpeedX=-SpeedX * 0.8
BallX=WandX
EndIf

Oval BallX-11, BallY-11,11,11
Line 0,BodenY,800,BodenY
Line WandX,0,WandX,BodenY
Flip 1
Until KeyHit(1)



So, das soll für heute erst mal genügen. Wenn du jetzt Fragen dazu hast, schreib sie hier rein....
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group