richtige kollision

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Affje

Betreff: richtige kollision

BeitragDi, März 16, 2004 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

ich bin gerade dabei einen kleinen ping-pong klon zu schreiben, habe hier jedoch ein problem:

ich brauche logischerweise 4 variablen, links, rechts, hoch, runter. wenn jetzt der ball z.b. mit dem pannel von spieler2 (rechts) kollidiert, dann soll er ja (physikalisch) korrekt in die andere richtung gehen.

ich habe es mit

hoch = not hoch
links = not links
.
.

gemacht, das geht aber nicht, weil der ball dann wieder in die richtung fliegt, von der er kam (was ja auch logisch ist...)
hat jemand ne idee, wie ich ich es besser lösen kann?

MBC

BeitragDi, März 16, 2004 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ich würde sagen, du nimmst jew. 1 Variable für hoch/runter und eine für links/rechts. Je nachdem wohin der Ball jetzt fliegen soll addierst du zu den Variablen entweder positive oder negative Werte. Und wenn der Ball dann irgendwo aufprallt (z.B.: Bildschirmrand, Schläger...) dann nimmst du einfach die Gegenzahl der Variable für links/rechts bzw. hoch/runter, was du halt brauchst. Vielleicht noch'n bisschen Zufall rein, damits nich so langweilig wird.

Ich hoffe, ich konnte dir helfen

Mit viel freundlichen Grüßen
Manuel
Computer sind auch nur Menschen! Wink
 

Affje

BeitragDi, März 16, 2004 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
gehts etwas genauer bitte?? ich habe da echt nicht sooo viel ahnung von..

MBC

BeitragDi, März 16, 2004 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

in Ordnung, ich hatte hier mal irgendwo so'n code rumligen...*kram*

Code: [AUSKLAPPEN]

Dim x#(250)
Dim y#(250)
Dim x2#(250)
Dim y2#(250)
Dim a(250)
Dim b(250)
Dim c(250)
Dim xwert(250)
Dim ywert(250)

Graphics 800,600,32,1
SetBuffer BackBuffer()

For i=0 To 250
x#(i)=Rnd(800)
y#(i)=Rnd(600)
a(i)=Rnd(255)
b(i)=Rnd(255)
c(i)=Rnd(255)
x2#(i)=Rnd(-0.5,0.5)
y2#(i)=Rnd(-0.5,0.5)
Next

plus=100

Repeat


For i=1 To plus
x(i)=x(i)+x2(i)
y(i)=y(i)+y2(i)
Color a(i),b(i),c(i)
Oval x(i),y(i),10+Rnd(-7,7),10+Rnd(-7,7)

;---------------------------------------------
;---------------------------------------------
If x(i)<0 Then x2(i)=-x2(i)
If x(i)>800 Then x2(i)=-x2(i)
If y(i)<0 Then y2(i)=-y2(i)
If y(i)>600 Then y2(i)=-y2(i)
;----------------------------------------------
;----------------------------------------------

Next

Flip
Cls
Until KeyHit(1)
End



Also, ich denke, das, was da eingerahmt ist, istdas was du brauchst: Immer wenn das Bild mit dem Bildschirm kollidiert, dann wird einfach die Richtung (wenns oben/unten kollidiert dann y-Richtung, links/rechts y-Richtung) umgedreht. Deshalb fliegt das Ding dann in die andere richtung weiter, also in einem Winkel von 90° (Einfallswinkel=45°=Ausfallswinkel=45°). Und anstatt das du dann nur immer stumpf die Richtung änderst hab ich gedacht, dass du einfach dann z.B.:

Code: [AUSKLAPPEN]

If x(i)<0 Then x2(i)=-x2(i)+Rnd(-2,2)
If x(i)>800 Then x2(i)=-x2(i)+Rnd(-2,2)
If y(i)<0 Then y2(i)=-y2(i)+Rnd(-2,2)
If y(i)>600 Then y2(i)=-y2(i)+Rnd(-2,2)


schreibst.

Ich hoffe, ich habe es jetzt einigermaßen verständlich erklärt, schau dir einfach mal oben das Programm an, vielleicht verstehstes dann auch besser...
Falls noch weitere Fragen aufkommen, bin ich gern bereit zu antworten, allerdings erst morgen wieder, weil ich jetzt noch'n bisschen schlafen muss, morgen ist Schule...

Also dann, viel Spaß noch damit
Mit freundlichen Grüßen
Manuel

P.S.: Die Punkte sollen alle Schmetterlinge sein, hab ich mir mal als bildschirmschoner geproggt, sieht ganz witzig aus...
Computer sind auch nur Menschen! Wink

Hubsi

BeitragDi, März 16, 2004 23:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
if kolli then richtungx=richtungx*-1
if kolli then richtungy=richtungy*-1
ballx=ballx+richtungx
bally=bally+richtungy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group