Ping Pong abprallwinkel

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

haubna

Betreff: Ping Pong abprallwinkel

BeitragSo, Okt 05, 2008 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe ein problem mein ball prallt nicht richtig ab ich möchte das:
desto weiter links er ist desto stärker prallt er nach links ab und umgekehrt hab schon in mehreren foren gesucht aber leider nichts gefunden ich hoffe ihr könnt mir helfen hier der code


Code: [AUSKLAPPEN]

Global xmax=1024, ymax=768
Global yy=xmax/2-30,yy2=10
Global xx=xmax/2-30,xx2=758
Global xkugel=xmax/2,ykugel=ymax/2
Global score1=0
Global score2=0
Global winkel=0
Global geschwindigkeit=3
Global w=Rnd(0,360)
Graphics xmax,ymax,32,1
SetBuffer BackBuffer()
Global ball=LoadImage("C:\Users\David\Pictures\ball.bmp")
Global schl=LoadImage("C:\Users\David\Desktop\Ping Pong\gfx\schlaeger.bmp")
Global schlaeger2=LoadImage("C:\Users\David\Desktop\Ping Pong\gfx\schlaeger.bmp")
If Rnd(0,1)=1 Then winkel=Rnd(105,45) Else winkel=Rnd(315,225)

Function geschwindigkeit()
   If KeyHit(2) Then geschwindigkeit=geschwindigkeit+1
   If KeyHit(3) Then geschwindigkeit=geschwindigkeit-1
   If geschwindigkeit>=25 Then geschwindigkeit=25
   If geschwindigkeit<=1 Then geschwindigkeit=1
End Function

Function spieler()
   DrawImage schl,yy,yy2
   DrawImage schlaeger2,xx,xx2
      If KeyDown(203) Then
         yy=yy-3
      EndIf
      If KeyDown(205) Then
         yy=yy+3
      EndIf
      If KeyDown (30) Then
         xx=xx-3
      EndIf
      If KeyDown (32) Then
         xx=xx+3
      EndIf
      If yy<5 Then
         yy=5
      EndIf
      If yy>954 Then
         yy=954
      EndIf
      If xx<5 Then
         xx=5
      EndIf
      If xx>954 Then
         xx=954
      EndIf
End Function


Function ball()
DrawImage ball,xkugel,ykugel
xkugel=xkugel+Cos(w)*geschwindigkeit
ykugel=ykugel-Sin(w)*geschwindigkeit
End Function


Function abprallen()

      If ImagesCollide(schl,yy,yy2,0,ball,xkugel,ykugel,0) Then
         w=w*-1
         abweichung=2*(yy-xkugel)
         w=w-abweichung
      EndIf
      If ImagesCollide(schlaeger2,xx,xx2,0,ball,xkugel,ykugel,0) Then
         w=w*-1
         abweichung=2*(xx-xkugel)
         w=w+abweichung
      EndIf
      If xkugel<=0 Then
         w=180-w
      EndIf
      If xkugel>=1024 Then
         w=180-w
      EndIf

End Function

Function punkte()

      If ykugel<=-6 Then
         score1=score1+1
         xkugel=xmax/2
         ykugel=ymax/2
         If Rnd(0,1)=1 Then w=Rnd(105,45) Else w=Rnd(315,225)
      EndIf
      If ykugel>=774 Then
         xkugel=xmax/2
         ykugel=ymax/2
         score2=score2+1
         If Rand(0,1)=1 Then w=Rnd(105,45) Else w=Rnd(315,225)
      EndIf
Text 400,5  ,(score2+"       :       "+score1)   
End Function

;hauptschleife
While Not KeyDown (1)
geschwindigkeit()
spieler()
ball()
abprallen()
punkte()
If w<=0 Then w=w+360
If w>360 Then w=w-360
Flip
Cls
Wend

End
 

martin_moehler

BeitragMo, Okt 06, 2008 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich dich richtig verstehe, dann überprüfst du das doch schon hier oder nicht??
Code: [AUSKLAPPEN]

If ImagesCollide(schl,yy,yy2,0,ball,xkugel,ykugel,0) Then
    w=w*-1
    abweichung=2*(yy-xkugel)
    w=w-abweichung
EndIf


PS: Variablen die einfach nur w heißen verwirren. Besser ist, du gibst ihnen einen Funktionsentsprechenden Namen.
 

haubna

BeitragMi, Okt 08, 2008 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ja aber er prallt nicht richtig ab und ich weis nicht wieso
 

martin_moehler

BeitragMi, Okt 08, 2008 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab dein Programm kurz getestet und mir ist dein Fehler nicht ganz klar. Beschreib ihn bitter näher! Das das Abprallen nicht richtig ist, sagt nicht viel aus!

Gruß Martin
 

haubna

BeitragMi, Okt 08, 2008 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
naja nach der zeit prallt bei mir der ball irgendwie ab

DeVIL

BeitragSo, Okt 19, 2008 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr seltsamer Code XD
Warum benutzt du nicht einfach Sinus und Cosinus?

sheldon

BeitragSo, Okt 19, 2008 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
http://de.wikibooks.org/wiki/B...y-Tutorial

Da wird auch ein Pong programmiert. Ich glaube das könnte dir helfen.

DeVIL

BeitragSo, Okt 19, 2008 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh endschuldigung du benutzt sie ja

Ich glaube bei einer Kollision auf der X Achse ist die Formel Winkel = 180 - Winkel
Bei der Y Achse Winkel = 360 - Winkel
 

VampireSilence

BeitragSo, Okt 19, 2008 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst der Fläche einfach eine Skala zuweisen, etwa so:

n: [-5|-4|-3|-|2|-1|0|1|2|3|4|5]

und dann Multiplizierst du den derzeitigen Abrallwinkel mit [n^1.5]. Das hat dann zur Folge, dass der Betrag des Winkels umso stärker steigt, ye weiter aussen der Ball auf die Fläche (und somit auch auf die Skala) trifft. Anstatt 1.5, kannst du auch kleinere Zahlen über 1 verwenden. Unter 1 würde der Winkel dann schrumpfen. Ich würde dir da empfehlen:

Winkel(neu) = Winkel(alt) * [n^k]
wobei {1 < k < 2}

Liebe Grüße
- VampireSilence
 

haubna

BeitragSo, Okt 19, 2008 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
naja hab das schon vor 9 tagen geschafft dann hab ich ein brick gemacht und derzeit arbeite ich an einem jump'n'run spiel aber trotzdem danke für eure hilfe

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group