Kollisionsproblem
Übersicht

OnkelManfredBetreff: Kollisionsproblem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo!
ich habe vor kurzer zeit versucht, eine art "pong" zu programmieren. das spiel zeichnet sich durch 4 schwierigkeitsgrade aus, wobei aber teilweise probleme mit der kollision auftreten. ich frag mich was man da machen kann bzw. wo der fehler liegt! Code: [AUSKLAPPEN] screenhoehe=600 Graphics 800,screenhoehe,32 SetBuffer BackBuffer() name1$=Input("Spieler 1: Bitte geben Sie ihren Namen ein: ") Print "" name2$=Input("Spieler 2: Bitte geben Sie ihren Namen ein: ") Cls Locate 1,1 Print "SCHWIERIGKEIT" Print "1: Einfach ( langsame Geschwindigkeit 1x)" Print "2: Mittel ( normale Geschwindigkeit 2x)" Print "3: Schwer ( schnelle Geschwindigkeit 3x)" Print "4: Unmöglich (unglaubliche Geschwindigkeit 5x)" Print "" schwierigkeit=Input("Bitte geben Sie die Schwierigkeit ein: ") If schwierigkeit>4 Then schwierigkeit=2 If schwierigkeit<1 Then schwierigkeit=2 If schwierigkeit=4 Then schwierigkeit=5 speedbonus=schwierigkeit name1$=name1$+" :" name2$=name2$+" :" Print "Drücken Sie eine beliebige Taste um das Spiel zu starten ..." WaitKey FlushKeys() Cls ding1=LoadImage("ding.bmp") ding2=LoadImage("ding.bmp") ball=LoadImage("ball.bmp") h_oben=-19 h_unten=19 h_ding=80 by=260 y1=230 y2=230 xb=390 speed_x=speedbonus speed_y=speedbonus p1=0 p2=0 DrawImage ding1,20,y1 DrawImage ding2,760,y2 While Not KeyHit(1) If speed_y=0 Then speed_y=speed_y-1 EndIf If by+speed_y<0 Then speed_y=-speed_y If by+speed_y>580 Then speed_y=-speed_y ;-------RECHTSKOLLISION--------- If xb=740 And by>y2-19 speed_x=-speed_x speed_y=speed_y-speedbonus EndIf If xb=740 And by>y2+80 speed_x=-speed_x If speed_y<=0 Then speed_y=speed_y+speedbonus Else speed_y=speed_y-speedbonus EndIf EndIf ;---------------------- ;----PUNKTE-RECHTS----- If xb>810 Then xb=390 p1=p1+1 Delay 1000 speed_x=-speed_x speed_y=0 y1=230 y2=230 by=260 EndIf ;---------------------- ;---------LINKSKOLLISION-------- If xb=40 And by>y1-19 speed_x=-speed_x speed_y=speed_y-speedbonus EndIf If xb=40 And by>y1+80 speed_x=-speed_x If speed_y<=0 Then speed_y=speed_y+speedbonus Else speed_y=speed_y-speedbonus EndIf EndIf ;------------------------ ;-------PUNKTE-LINKS------- If xb<-50 Then xb=390 p2=p2+1 Delay 1000 speed_x=-speed_x speed_y=0 y1=230 y2=230 by=260 EndIf ;--------------------------- ;----BLÖCKE-BEGRENZUNG---- If y1>500 Then y1=500 If y1<20 Then y1=20 If y2>500 Then y2=500 If y2<20 Then y2=20 ;-------------------------- ; =====SPIELER 1========= If KeyDown(31)=True Then y1=y1+schwierigkeit+2 EndIf If KeyDown(17)=True Then y1=y1-schwierigkeit-2 EndIf ; ======================= ; =====SPIELER 2========= If KeyDown(208)=True Then y2=y2+schwierigkeit+2 EndIf If KeyDown(200)=True Then y2=y2-schwierigkeit-2 EndIf ; ======================= xb=xb+speed_x by=by+speed_y DrawImage ding1,20,y1 DrawImage ding2,760,y2 DrawImage ball,xb,by Text 1,1,"Punkte:" Text 1,21,name1$+p1 Text 1,36,name2$+p2 Flip Cls Wend p.s.: im 3. schwierigkeitsgrad ist dies am einfachsten zu erkennen |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Würde vorschlagen, die Variable "xb" nicht mit "=" auf einen Wert exakt zu überprüfen, sondern mit ">=" und "<=" überprüfen, ob die SPielfeldbegrenzungen über- bzw unterschritten wurden. Das funktioniert für jede Geschwindigkeit ![]() mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
OnkelManfred |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
eig gute idee, aber funktioniert nicht, da der ball, wenn er das spielfeld überschritten hat, teilweise wieder zurück "fliegt" ![]() Code: [AUSKLAPPEN] ;---------LINKSKOLLISION-------- If xb<=40 And by>y1-19 speed_x=-speed_x speed_y=speed_y-speedbonus EndIf If xb<=40 And by>y1+80 speed_x=-speed_x If speed_y<=0 Then speed_y=speed_y+speedbonus Else speed_y=speed_y-speedbonus EndIf EndIf ;-------RECHTSKOLLISION--------- If xb>=740 And by>y2-19 speed_x=-speed_x speed_y=speed_y-speedbonus EndIf If xb>=740 And by>y2+80 speed_x=-speed_x If speed_y<=0 Then speed_y=speed_y+speedbonus Else speed_y=speed_y-speedbonus EndIf EndIf |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann halt vor der Bewegung prüfen ob mit der momentanen Geschwindigkeit im nächsten Frame der Ball über die Begrenzung fliegt oder nicht. Wenn nicht, dann Bewegung in jeweilige Richtung durchführen.
Oder anders: Die Ballposition zwischenspeichern und bei einer Kollisions vor dem zeichnen auf die ursprüngliche Position festlegen. Gerade diese Methode wird bei einer Imagekollision gerne genommen, da am wenigsten Probleme verursacht. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
OnkelManfred |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok und wie sollte man das genau umsetzen ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group