2D Problem mit Kollision bzw Winkel änderung ( Ab prallen)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Broken Arrow

Betreff: 2D Problem mit Kollision bzw Winkel änderung ( Ab prallen)

BeitragMi, Mai 07, 2008 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Brauche Hilfe
Hab ein Problem mit Kollision

Schläger sollen den Ball wieder zurückschleudern , können es aber nicht da der ball durch sie durchfliegt
Es funktioniert Teilweise Richtig.



Code: [AUSKLAPPEN]

.Start

Graphics 1024, 768, 0, 1
Zeiter = CreateTimer(50)

Spieler_Gruen_Bild = LoadAnimImage ("SG.bmp",113,113,0,18)
Spieler_Rot_Bild = LoadAnimImage ("SR.bmp",113,113,0,18)
Mitte = LoadImage ("Mitte2.bmp")
Ball_Bild = LoadImage ("Ball.bmp")
Begrenzung_O = LoadImage ("BO.bmp")
Begrenzung_U = LoadImage ("BU.bmp")
KO_RING = LoadImage ("Ko Ring.bmp")

MidHandle Spieler_Gruen_Bild
MidHandle Spieler_Rot_Bild
MidHandle Mitte
MidHandle Ball_Bild



Spieler_Gruen_X = 60
Spieler_Gruen_Y = 768/2
Geschwingigkeit_Gruen = 4
Geschwingigkeit_Rot = 4
Winkel_gruen= 0
Spieler_Rot_X = 1024 - 60
Spieler_Rot_Y = 768/2
Winkel_Rot= 0
neue_kugel= True
Type Kugeln
Field x
Field y
Field Speed
Field Winkel
Field Kreis_Zeit
End Type

Repeat
Cls

zaehler = zaehler + 1
If zaehler > 50 Then Goto neue_Kugel_machen

.Spiel
If KeyDown (1) Then End
If KeyDown (17) Then Spieler_Gruen_Y = Spieler_Gruen_Y - Geschwingigkeit_Gruen
If KeyDown (31) Then Spieler_Gruen_Y = Spieler_Gruen_Y + Geschwingigkeit_Gruen
If KeyDown (32) Then Winkel_Gruen = Winkel_Gruen + 1
If KeyDown (30) Then Winkel_Gruen = Winkel_Gruen - 1
If Winkel_Gruen < 0 Then Winkel_Gruen = 17
If Winkel_Gruen > 17 Then Winkel_Gruen = 0

If KeyDown (200) Then Spieler_Rot_Y = Spieler_Rot_Y - Geschwingigkeit_Rot
If KeyDown (208) Then Spieler_Rot_Y = Spieler_Rot_Y + Geschwingigkeit_Rot
If KeyDown (205) Then Winkel_Rot = Winkel_Rot + 1
If KeyDown (203) Then Winkel_Rot = Winkel_Rot - 1
If Winkel_Rot < 0 Then Winkel_Rot = 17
If Winkel_Rot > 17 Then Winkel_Rot = 0




DrawImage Spieler_Gruen_Bild,Spieler_Gruen_X,Spieler_Gruen_Y,Winkel_Gruen
DrawImage Spieler_Rot_Bild,Spieler_Rot_X,Spieler_Rot_Y,Winkel_Rot
DrawImage Mitte,1024/2,768/2 


For Kugel.Kugeln = Each Kugeln
If ImagesCollide(Ball_Bild,Kugel\X,Kugel\Y,0,Begrenzung_O,32,0,0)
Kugel\Winkel = 360 - Kugel\Winkel
EndIf
If ImagesCollide(Ball_Bild,Kugel\X,Kugel\Y,0,Begrenzung_U,32,768-76,0)
Kugel\Winkel = 360 - Kugel\Winkel
EndIf

If ImagesCollide  (Ball_Bild,Kugel\X,Kugel\Y ,0,Spieler_Rot_Bild,Spieler_Rot_X,Spieler_Rot_Y,Winkel_Rot)
Kugel\Winkel = 360 - Kugel\Winkel
EndIf

If ImagesCollide  (Ball_Bild,Kugel\X,Kugel\Y ,0,Spieler_Gruen_Bild,Spieler_Gruen_X,Spieler_Gruen_Y,Winkel_Gruen)
Kugel\Winkel = 180 - Kugel\Winkel

EndIf
Kugel\Kreis_zeit = Kugel\Kreis_zeit + 1
If ImagesCollide  (Ball_Bild,Kugel\X,Kugel\Y,0 ,Mitte,1024/2,768/2,0 ) And Kugel\Kreis_zeit > 70
Kugel\Winkel = 360 -  Kugel\Winkel - Kugel\Winkel

EndIf


If Kugel\Winkel > 360 Then Kugel\Winkel = 0
If Kugel\Winkel < 0 Then Kugel\Winkel = 360

Kugel\X = Kugel\X + Cos (Kugel\Winkel) * Kugel\Speed
Kugel\Y = Kugel\Y - Sin (Kugel\Winkel) * Kugel\Speed
DrawImage Ball_Bild,Kugel\X,Kugel\Y

Next
DrawImage Begrenzung_O,32,0
DrawImage Begrenzung_U,32,768-76

WaitTimer (Zeiter)
SetBuffer BackBuffer ()
Flip
Until KeyDown (2)
Goto Spiel
.neue_Kugel_machen
Kugel.Kugeln = New Kugeln
Kugel\X = 1024/2
Kugel\Y = 768/2
Kugel\Speed = 6
Kugel\Winkel = Rand (1,360)
neue_kugel = False
zaehler = 0
If Kugel\Winkel = 90 Then Kugel\Winkel=  Rand (1,360)
Goto Spiel

[quote][/quote]
  • Zuletzt bearbeitet von Broken Arrow am Mi, Mai 07, 2008 19:27, insgesamt einmal bearbeitet

The_Nici

BeitragMi, Mai 07, 2008 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Rechne bei der Kollision mit dem Schläger (Soll ja glaub Pong werden) *-1. Einfallswinkel=Ausfallswinkel.

Ich zeig dir mal n'Auszug aus meinem Pongclone:

Code: [AUSKLAPPEN]

         b\flieg_x=(b\flieg_x * -1)
         b\flieg_y=(b\flieg_y * -1) + (eins\y-b\y)/10*-1


b ist das Ballhandle, "eins" einer der Spieler.
Bei flieg_y habe ich noch so gemacht, dass es je weiter es am Rand ist desto mehr Abweichung hat es.

Hoffe ich konnte dir helfen und bin der erste der antwortet. xD

EDIT: OMG! Verwende kein Goto sondern Funktionen! Gewöhn dir Goto gleich wieder ab! Pfui!

Broken Arrow

BeitragMi, Mai 07, 2008 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Versteh ich nicht

was ist flieg ?
was ist Ball Handle ?
kann man ball Handle auf Deutsch übersetzen (bin neu)

The_Nici

BeitragMi, Mai 07, 2008 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Bla, b\ ist halt der Ball-Type. b\fliegx bzw b\fliegy ist die x bzw y Geschwindigkeit.

Broken Arrow

BeitragDo, Mai 08, 2008 13:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe das kompett anders geschrieben
muss ich jetzt alles ändern?
Ich hab dass mit winkeln
gibt es da ne andere Lösung

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group