prob mit kolision

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

dominik

Betreff: prob mit kolision

BeitragMo, Apr 12, 2004 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
erst prog testen dann lesen

ich hab des prog hier schon mal irgentwo im forum geseh und hab ihn mal selber geschrieben. nur klappt bei mir das mit der kollisionsprüfung nicht so ganz.das obere kästchen dürfte doch frühesten wenn es unter der grauen linie ist mit dem roten kästchen kolidieren. das tut es aber schon wesentlich früher ich versteh das nicht......
muss eigetnlich ein rechtlogischer fehler sein, oder es liegt an der reihen folge der graphicausgabe, ich kanns mir jedefalls nicht erklären.

hier der code:
Code: [AUSKLAPPEN]
Graphics 1024, 768
SetBuffer BackBuffer()
ky = - 100
kx = Rand(201, 599)
rkx = 500
geschwindigkeit = 1
durchlauf = 1

Repeat
Cls
Line 200, 0, 200, 768
Line 700, 0, 700, 768
Color 50, 50, 50
Line 200, 550, 700, 550
Color 255, 255, 255
Rect kx, ky, 100, 100, 0
ky = ky + geschwindigkeit
If ky > 768 Then
  ky = - 100
  kx = Rand(200, 600)
  If geschwindigkeit < 100 Then geschwindigkeit = geschwindigkeit + 1   
  durchlauf = durchlauf + 1
EndIf

If rkx > 600 Then rkx = 599
If rkx < 200 Then rkx = 201
Color 255, 0, 0
Rect rkx, 650, 100, 100
Color 255, 255, 255

mlx = kx - 100
If rkx < (kx + 100) And rkx > (kx - 100) Then koli = True Else koli = False
If rkx < (kx + 100) And rkx > (kx - 100) And ky > 550 Then WaitKey
Text 0,0, "koli: " + koli
Text 0,20, "Geschwindigkeit: " + geschwindigkeit
Text 0,40, "rkGeschwindigkeit: " + (geschwindigkeit/2)
Text 0, 60, "durchlauf: " + durchlauf

If koli = True Then
  If kx < 450 Then rkx = rkx + (geschwindigkeit/ 2)
  If kx > 450 Then rkx = rkx - (geschwindigkeit/ 2)
EndIf

If KeyDown(205) Then rkx = rkx + 1
If KeyDown(203) Then rkx = rkx - 1
Flip
Until KeyDown(1)
End


PS: wenn man die geschwindigkeitbegrenzung weglöscht und dann einfach mal laufen läst kommt bei mir die erste kolision immer im 1229 durchlauf. schreib mal dazu wanns bei euch kommt. danke

Paul

BeitragMo, Apr 12, 2004 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habs mir nur kurz durchgeschaut und festgestellt, dass du kein rectsoverlap verwendest.
Warum?

Paul
Stratocaster black - Roland MicroCube
User posted image
Girgl-World, wer's nich kennt, is' blöd!

dominik

BeitragMo, Apr 12, 2004 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
weil ich ohne fertige befehle sonder nur mit if then machen wollte.
wäre natürlich auch möglich aber zu einfach.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Apr 12, 2004 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
liegt auf den ersten Blick hierdran
setzt das mal vor flip dann geht es
ky = ky + geschwindigkeit

denn erst wird das Kästchen weitergesetzt und dann die Collision abgefragt
danach wird aber erst neu gezeichnet
[BB2D | BB3D | BB+]

dominik

BeitragMo, Apr 12, 2004 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
nee geht immer noch nicht

regaa

BeitragMo, Apr 12, 2004 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Was soll denn überhaupt passieren? WO soll es kolidieren und was soll danach geschehen?
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

dominik

BeitragDi, Apr 13, 2004 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab extra drübergeschrieben erst testen dann lesen aber anscheinend macht des ja sowiso keiner. ich dachte ihr könnt lesen.

also wenn des weiße rechteck wa immmer von oben runter fällt mit dem roten was sich nur in der horizontalen bewegt kolidiert dann sollte eingentlich das prog angehalten werden
Code: [AUSKLAPPEN]
If rkx < (kx + 100) And rkx > (kx - 100) And ky > 550 Then WaitKey


das machts ja auch aber eben an der falschen stelle oder zumindestens immer an einer stelle an der die beide rechtecke nicht miteinander kolidiert sind. weil ky immer kleiner als 550 ist.

regaa

BeitragDi, Apr 13, 2004 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, also ich hab die Grafikbefehle nach den Rechenoperationen gemacht :

Code: [AUSKLAPPEN]

Graphics 1024, 768
SetBuffer BackBuffer()
ky = - 100
kx = Rand(201, 599)
rkx = 500
geschwindigkeit = 1
durchlauf = 1

Repeat
Cls
ky = ky + geschwindigkeit
If ky > 768 Then
  ky = - 100
  kx = Rand(200, 600)
  If geschwindigkeit < 100 Then geschwindigkeit = geschwindigkeit + 1   
  durchlauf = durchlauf + 1
EndIf

If rkx > 600 Then rkx = 599
If rkx < 200 Then rkx = 201

mlx = kx - 100
If rkx < (kx + 100) And rkx > (kx - 100) Then koli = True Else koli = False
If rkx < (kx + 100) And rkx > (kx - 100) And ky => 550  Then WaitKey

If koli = True Then
  If kx < 450 Then rkx = rkx + (geschwindigkeit/ 2)
  If kx > 450 Then rkx = rkx - (geschwindigkeit/ 2)
EndIf

If KeyDown(205) Then rkx = rkx + 1
If KeyDown(203) Then rkx = rkx - 1


Text 0,0, "koli: " + koli
Text 0,20, "Geschwindigkeit: " + geschwindigkeit
Text 0,40, "rkGeschwindigkeit: " + (geschwindigkeit/2)
Text 0, 60, "durchlauf: " + durchlauf


Line 200, 0, 200, 768
Line 700, 0, 700, 768
Color 50, 50, 50
Line 200, 550, 700, 550
Color 255, 255, 255
Rect kx, ky, 100, 100, 0

Color 255, 0, 0
Rect rkx, 650, 100, 100
Color 255, 255, 255


Flip
Until KeyDown(1)
End


Und außerdem ne kleine Veränderung an einem If-Satz vorgenommen:
Code: [AUSKLAPPEN]

If rkx < (kx + 100) And rkx > (kx - 100) And ky => 550  Then WaitKey


Ist das so wie du es haben woltest?
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

dominik

BeitragDi, Apr 13, 2004 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
nein, die beiden rechtecke treffen sich immer noch nicht. hast du deine version mal selber getestet?

Kryan

BeitragDi, Apr 13, 2004 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
nach 102 Very Happy
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

Dreamora

BeitragDi, Apr 13, 2004 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
also wenn du da schon ein waitkey hast dann muss das flip davor sein. Weil sonst wird das programm 1 flip zu früh angehalten, wenn sie mathematisch überlappen und dann is noch kein flip durch

dominik

BeitragDi, Apr 13, 2004 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Dreamora: hab ich auch schon ausprobiert. kommt aber auch nix bei raus.

regaa

BeitragDi, Apr 13, 2004 23:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir gehts perfekt, piselgenau hält das weiße rechteck am roten.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

dominik

BeitragMi, Apr 14, 2004 10:45
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du mir deine email gibts dann kann ich dir nen screen schicken wies bei mir aussieht.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Apr 14, 2004 12:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ic hbin ja kein Profi aber dies hier gibt mir zu denken....
was passiert wenn das rechteck genau bei 450 kommt......
... bleibt der stehen... ODER?

Code: [AUSKLAPPEN]
If koli = True Then
  If kx < 450 Then rkx = rkx + (geschwindigkeit/ 2)
  If kx > 450 Then rkx = rkx - (geschwindigkeit/ 2)
EndIf

besser so
Code: [AUSKLAPPEN]
If koli = True Then
  If kx < 450 Then rkx = rkx + (geschwindigkeit/ 2)
  If kx => 450 Then rkx = rkx - (geschwindigkeit/ 2)
EndIf


hier nochmal mit dem neuen geänderten code Code
habe da noch eien Bildanzeige mit rein gebracht um geanu zu sehen wie denn das aussieht wenn die Kollision statfindet!
Dazu muss natürlich das "=" weggemacht werden um daq es sonst zu keiner Kolli kommt!

Code: [AUSKLAPPEN]
Graphics 1024, 768
SetBuffer BackBuffer()
ky = - 100
kx = Rand(201, 599)
rkx = 500
geschwindigkeit = 1
durchlauf = 1

Repeat
Cls
Line 200, 0, 200, 768
Line 700, 0, 700, 768
Color 50, 50, 50
Line 200, 550, 700, 550
Color 255, 255, 255
Rect kx, ky, 100, 100, 0
ky = ky + geschwindigkeit
If ky > 768 Then
  ky = - 100
  kx = Rand(200, 600)
  If geschwindigkeit < 100 Then geschwindigkeit = geschwindigkeit + 1   
  durchlauf = durchlauf + 1
EndIf

If rkx > 600 Then rkx = 599
If rkx < 200 Then rkx = 201
Color 255, 0, 0
Rect rkx, 650, 100, 100
Color 255, 255, 255

mlx = kx - 100
If rkx < (kx + 100) And rkx > (kx - 100) Then koli = True Else koli = False
If rkx < (kx + 100) And rkx > (kx - 100) And ky > 550 Then Gosub Kollisionbild
Text 0,0, "koli: " + koli
Text 0,20, "Geschwindigkeit: " + geschwindigkeit
Text 0,40, "rkGeschwindigkeit: " + (geschwindigkeit/2)
Text 0, 60, "durchlauf: " + durchlauf

If koli = True Then
  If kx < 450 Then rkx = rkx + (geschwindigkeit/ 2)
  If kx => 450 Then rkx = rkx - (geschwindigkeit/ 2)
EndIf

If KeyDown(205) Then rkx = rkx + 1
If KeyDown(203) Then rkx = rkx - 1

Until KeyDown(1)
End

.Kollisionbild
Cls
Rect kx, ky, 100, 100, 0
Rect rkx, 650, 100, 100,1
Flip
WaitKey
Return
[BB2D | BB3D | BB+]

dominik

BeitragFr, Apr 16, 2004 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry aber versteh dein prog nih so ganz. bei mir läuft des garnet.

rambo256

BeitragFr, Apr 16, 2004 11:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab das auch ausprobiert,das Bleibt am Anfang einfach hängen ?!

regaa

BeitragFr, Apr 16, 2004 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
wie gesagt, mit meinen Code gehts bei mir perfekt, der rote Block bleibt bei Kollision stecken , und das Pixelgenau, wollt ihr Screenshots sehen?
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Apr 16, 2004 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
mein fehler,
hab beim Kopieren das Flip nicht mit kopiert, deswegen sieht man nichts!
hier nochmalCode: [AUSKLAPPEN]
Graphics 1024, 768 ;,16,2
SetBuffer BackBuffer()
ky = - 100
kx = Rand(201, 599)
rkx = 500
geschwindigkeit = 1
durchlauf = 1

Repeat
Cls
Line 200, 0, 200, 768
Line 700, 0, 700, 768
Color 50, 50, 50
Line 200, 550, 700, 550
Color 255, 255, 255
Rect kx, ky, 100, 100, 0
ky = ky + geschwindigkeit
If ky > 768 Then
  ky = - 100
  kx = Rand(200, 600)
  If geschwindigkeit < 100 Then geschwindigkeit = geschwindigkeit + 1   
  durchlauf = durchlauf + 1
EndIf

If rkx > 600 Then rkx = 599
If rkx < 200 Then rkx = 201
Color 255, 0, 0
Rect rkx, 650, 100, 100
Color 255, 255, 255

mlx = kx - 100
If rkx < (kx + 100) And rkx > (kx - 100) Then koli = True Else koli = False
If rkx < (kx + 100) And rkx > (kx - 100) And ky > 550 Then Gosub Kollisionbild
Text 0,0, "koli: " + koli
Text 0,20, "Geschwindigkeit: " + geschwindigkeit
Text 0,40, "rkGeschwindigkeit: " + (geschwindigkeit/2)
Text 0, 60, "durchlauf: " + durchlauf

If koli = True Then
  If kx < 450 Then rkx = rkx + (geschwindigkeit/ 2)
  If kx => 450 Then rkx = rkx - (geschwindigkeit/ 2)
EndIf

If KeyDown(205) Then rkx = rkx + 1
If KeyDown(203) Then rkx = rkx - 1
Flip
Until KeyDown(1)
End

.Kollisionbild
Cls
Rect kx, ky, 100, 100, 0
Rect rkx, 650, 100, 100,1
Flip
WaitKey
Return
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group