Problem mit Collision und PositionEntity

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

planetlone

Betreff: Problem mit Collision und PositionEntity

BeitragMi, Feb 02, 2011 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo! Da ich mit dem 2D-Teil von Blitz schon lange gut zurecht komme, möchte ich mich nun mal in 3D einarbeiten und habe gleich ein (wahrscheinlich dummes) Problemchen, bzw. kapier ich das nicht:

Die Y-Koordinate bei PositionEntity liegt bei den CUBs bei 5 und bei der Kamera habe ich das auf 5.099 gestellt. Wenn ich die Werte auf 1 bzw. 1.099 umstelle lande ich mitten im CUBe vor mir.
Wenn ich aber die Collision rauslasse funktioniert es wieder.

Das verstehe ich nicht, weil doch die Y-Koordinate eigentlich keinen Einfluss darauf haben sollte, oder?

Danke für Eure Erklärungen.

Code: [AUSKLAPPEN]

Graphics3D 800,600,16,1
SetBuffer BackBuffer()


Dim CUB(1000)


KAMERA = CreateCamera() : CameraViewport KAMERA, 0, 0, 800, 600
CameraFogMode KAMERA, 1 : CameraFogRange KAMERA, 0, 18 : CameraRange KAMERA, 0.1, 18
EntityType KAMERA,1 : EntityRadius KAMERA,0.3

LICHT = CreateLight(2, KAMERA)


CNR=1 : X1=1 : X2=2 : X3=3 : Y1=1 : Y2=2

CUB(1) = CreateCube()
EntityColor CUB(1),255,0,0
PositionEntity CUB(1),Y1+(Y1-1),5,X1+(X1-1)
EntityType CUB(1),3

CUB(2) = CreateCube()
EntityColor CUB(2),0,0,255
PositionEntity CUB(2),Y1+(Y1-1),5,X2+(X2-1)
EntityType CUB(2),3

CUB(3) = CreateCube()
EntityColor CUB(3),255,0,0
PositionEntity CUB(3),Y1+(Y1-1),5,X3+(X3-1)
EntityType CUB(3),3

CUB(4) = CreateCube()
EntityColor CUB(4),255,0,0
PositionEntity CUB(4),Y2+(Y2-1),5,X1+(X1-1)
EntityType CUB(4),3


STARTX=2 : STARTY=2 : STARTR=4


;Blickrichtung und Kamera festlegen

If STARTR=4 Then winkel#=180
If STARTR=8 Then winkel#=90
If STARTR=6 Then winkel#=0
If STARTR=2 Then winkel#=270

PositionEntity KAMERA,STARTY+(STARTY-1),5.099,STARTX+(STARTX-1)
RotateEntity KAMERA, 0, winkel#, 0


;MAIN-LOOP

While Not KeyHit(1)

  If KeyDown(200) Then MoveEntity KAMERA,0,0,0.1
  If KeyDown(208) Then MoveEntity KAMERA,0,0,-0.1
  If KeyDown(203) Then winkel#=winkel#+2 : RotateEntity KAMERA, 0, winkel#, 0
  If KeyDown(205) Then winkel#=winkel#-2 : RotateEntity KAMERA, 0, winkel#, 0
 
  Collisions 1,3,2,3
  Cls
  UpdateWorld
  RenderWorld

  Flip
Wend

ClearWorld
End

Tankbuster

BeitragMi, Feb 02, 2011 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Collisions gehört nicht in die Schleife. Genausowenig wie das Cls Wink

Zu dem Problem:
Während du Kollisionen angeschaltet hast, kann es beim verschieben von Entitiys, die mit irgendwas kollidieren zu problemen kommen. Die landen dann irgendwo anders. Vielleicht ist das dein Problem Wink
Also..

Wenn du ein Entity verschieben willst:

Kollision aus, verschieben, kollision an Wink

Das gilt natürlich nur dann, wenn die Objekte beim verschieben nicht kollidieren sollen, sondern einfach ihre Position ändern sollen.
Twitter
Download Jewel Snake!
Windows|Android

planetlone

BeitragMi, Feb 02, 2011 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Tankbuster! Ich habe Cls und Collision jetzt aus der Schleife genommen, aber ich kapiere immernoch nicht, warum das Ändern der Y-Koordinate plötzlich zu einem Verschieben meiner Kamera führt, ohne dass ich eine Taste drücke. DAS Verhältnis der Y-Koordinaten von Kamera und den CUBs bleibt doch gleich ?!?!

Silver_Knee

BeitragMi, Feb 02, 2011 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
ohne den code jetzt gelesen zu haben
Vielleicht geschieht etwas beim verschieben in x-Richtung, was die Objekte nachher gar nicht an den Koordinaten stehen lässt von denen du sie dann in y-Richtung verschieben willst.

planetlone

BeitragDo, Feb 03, 2011 9:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, es passiert schon beim Starten des Programmes und ersten positionieren der Objekte und Kamera.

PositionENtity mit Y = 5 bzw Y = 5.099 (Kamera)

klappt alles (auch mit Collision) und beim Starten mit

PositionEntity mit Y = 1 bzw Y = 1.099 (Kamera)

ist die Kamera sofort am falschen Ort (in einem Block). Wenn ich die Collision aber weglasse, geht es.

Brauche da echt dringend Hilfe! Wink)

Danke!

NightPhoenix

BeitragDo, Feb 03, 2011 12:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst die Kollisionen auch temporär ausschalten, verschieben und wieder einschalten Wink

planetlone

BeitragDo, Feb 03, 2011 14:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, da die Kollision ja erst kurz vor der Main-Loop gesetzt wird (NACHDEM die PositionENtitys gemacht wurden) und der Effekt ja schon eintritt, bevor ich irgendwas mit Bewegungen mache, muss es ja an was anderem liegen.

Ich kann das natürlich tricksen, ich lasse einfach Y auf 5, aber ich will ja VERSTEHEN, woran das liegt... Wink)

TurTur

BeitragDo, Feb 03, 2011 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Problem offenbart wohl eine Eigenart von BB3D, die ich so auch noch nicht gesehen habe.
Aber es kommt definitiv zu einer Kollision mit den Cubes.
Es wird auch nicht nur die Y-Position sondern auch die X- und die Z-Position verändert.
Das Problem tritt aber erst nach dem ersten Updateworld() auf, wie folgende Modifikation deines Quelltextes zeigt.

Code: [AUSKLAPPEN]

  :
PositionEntity KAMERA,STARTY+(STARTY-1),5.099,STARTX+(STARTX-1)
RotateEntity KAMERA, 0, winkel#, 0

debuglog "P1: "+EntityX(Kamera)+" "+EntityY(Kamera)+" "+EntityZ(Kamera)  ;-- Korrekte Position
Collisions 1,3,2,3
UpdateWorld()
debuglog "P2: "+EntityX(Kamera)+" "+EntityY(Kamera)+" "+EntityZ(Kamera)  ;-- falsche Position


;MAIN-LOOP
  :


BlitzBasic rechnet wohl die Positionierung der Kamera beim Updateworld() neu aus und dieses Mal unter Berücksichtigung der Collisions-Anweisung.
Die Ursache liegt wohl in der Kollisionstyp-Festlegung VOR der Anweisung 'PositionEntity Kamera, .......' .
Wenn du alle Typfestlegungen (Kamera und Cubes) nach der Positionierung der Kamera definierst und erst dann die Kollisionsabfrage aktivierst, tritt der Fehler nicht mehr auf.

Code: [AUSKLAPPEN]

   :
PositionEntity KAMERA,STARTY+(STARTY-1),YPos+0.099,STARTX+(STARTX-1),1
RotateEntity KAMERA, 0, winkel#, 0

EntityType Kamera,1   ;--Kollisionstyp-Festlegung nach den Objekt-Positionierungen
EntityType CUB(1),3
EntityType CUB(2),3
EntityType CUB(3),3
EntityType CUB(4),3

Collisions 1,3,2,3

;MAIN-LOOP
   :



mfg
TurTur

planetlone

BeitragFr, Feb 04, 2011 0:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke an alle für die Info! Jetzt blicke ich da mehr durch! Super! Smile)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group