Kollision suboptimal

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

BigMaexle

Betreff: Kollision suboptimal

BeitragDo, Feb 28, 2008 10:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Moinsen Leutz

Ich tun habe Problem.

Mein Kollision hat Fehler. Zugrunde liegt folgender Code

Code: [AUSKLAPPEN]
Graphics 640,480
SetBuffer BackBuffer ()

ClsColor 255,255,255
Color 0,0,0

HeldSprung#=0
HeldX#=400
HeldY#=200

Repeat
   
   If KeyDown(205) Then HeldX=HeldX+1
   If KeyDown(203) Then HeldX=HeldX-1
   If KeyHit(57) Then HeldSprung=-15
   
   HeldSprung=HeldSprung+0.4 ;Schwerkraft
   
   If HeldX+10>200 And HeldX+10<=205 And HeldY > 300-15 Then HeldX=200-10 ; Linke Wand
   If HeldX-10<350 And HeldX-10=>345 And HeldY > 300-15 Then HeldX=350+10 ; Rechte Wand
   
   If HeldX+10>200 And HeldX-10<350 And HeldY > 300-15 Then HeldY=300-15 : HeldSprung=0 ; ObenBox
   If HeldY > 450-15 Then HeldY = 450-15 : HeldSprung=0 ; Boden
   
   HeldY=HeldY+HeldSprung ; Fallen
   
   Rect 0,450,640,30
   Rect 200,300,150,150
   
   Line HeldX-10,HeldY-15,HeldX+10,HeldY+15
   Line HeldX-10,HeldY+15,HeldX+10,HeldY-15

Flip
Cls

Until KeyHit(1)


Problem:

Wenn man ganz links o. rechts auf den Block springt,( Also sodass man gnaz knapp auf der Kante steht) greift zuerst die Wandkollision. Das will ich nicht. Die Kollisionen vertauschen verschiebt nur das Problem. Also wie löse ich das Problem und habe eine saubere Kollisionsabfrage?
--------------------------------------
Ich bin unfreiwillig ein Mitglied dieser kapitalistischen Gesellschaft, wo jeder Geldgeile Unternehmer an mein Geld will und ich selbst bei meinen Entscheidungen so gut wie willenlos bin...... und ich bin glücklich drüber

Smily

BeitragDo, Feb 28, 2008 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
habs jetzt nur überflogen, aber du scheinst horizontale und vertikale kollisionen irgendwie miteinander zu verfrickeln.

Also ich würde das so lösen (mal ein Beispiel-Pseudo-Code)

Code: [AUSKLAPPEN]

  neux = x + bewegungX
  neuy = y + bewegungY
  ok=1
  if neuX >maximalX ok = 0
  if neuX < minimalX ok = 0
  if neuY > maxiamY ok = 0
  if neuY < minimalY ok = 0
  if(ok)
    x = neux
    y = neuy
  end if


wie schon gesagt, das kam grad aus meinem kopf. Versuch das mal irgendwie für deinen Code umzusetzen/anzupassen
cu,
Smily0412

BigMaexle

BeitragDo, Feb 28, 2008 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit AltX/Y zund NeuX/Y arbeiten....

Gute Idee. Aber neuer Bug Cool :

Ich fall mit 10 Pixel auf den Block.
bin jetz zu 5 Pixeln drin.
Meine Kollision greift und ich werde die 10 Pixel zurückgesetzt.
Jetz stehe ich wieder in der Luft, blöde...

Auch muss ich ja irgendiwe unterscheiden, ob man an die Wand stößt oder oben drauf landet. Da hab ich grad ne Denkblockade.
--------------------------------------
Ich bin unfreiwillig ein Mitglied dieser kapitalistischen Gesellschaft, wo jeder Geldgeile Unternehmer an mein Geld will und ich selbst bei meinen Entscheidungen so gut wie willenlos bin...... und ich bin glücklich drüber
 

Gast

BeitragDo, Feb 28, 2008 15:10
Antworten mit Zitat
Versetz den Player immer 1 Pixel nach inten, bis Kollison = 0

The_Nici

BeitragFr, Feb 29, 2008 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder rechne den MOD-Wert von Tile-Position/Player-Position zur Player-Position.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group