prob mit kolision
Übersicht

![]() |
dominikBetreff: prob mit kolision |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
weil ich ohne fertige befehle sonder nur mit if then machen wollte.
wäre natürlich auch möglich aber zu einfach. |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
nee geht immer noch nicht | ||
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
nein, die beiden rechtecke treffen sich immer noch nicht. hast du deine version mal selber getestet? | ||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
nach 102 ![]() |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Dreamora: hab ich auch schon ausprobiert. kommt aber auch nix bei raus. | ||
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn du mir deine email gibts dann kann ich dir nen screen schicken wies bei mir aussieht. | ||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
sorry aber versteh dein prog nih so ganz. bei mir läuft des garnet. | ||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab das auch ausprobiert,das Bleibt am Anfang einfach hängen ?! | ||
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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+]
|
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group