Collisions seitlich
Übersicht

X-traBetreff: Collisions seitlich |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich habe einen level mit bodenkollision, das funktioniert auch tadellos, aber ich habe in diesem level einen extra sockel gemacht, und da kommen wir zu meinem problem.
wie stelle ich es an, dass sowohl die seitliche kollision zur wand des sockels funktioniert, sowie wenn ich auf dem sockel genauso. ich habe eine sprungroutine, die auf dem level funktioniert, aber der sockel ist ja einzeln, und vielleicht will ich den später noch bewegen lassen. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
1.) Der Sockel muß dann seitlich auch Triangles haben, deren CollisionsType eingestellt ist.
2.) Wenn der Sockel sich bewegt, wird Blitz3D in den meisten Fällen die Kollision nicht registrieren. So ein Verhalten kann man aber durch etwas Mehraufwand beheben. Ob es aber Sinnvoll ist, ist eine andere Geschichte. In meinem Beispiel muß UpdateWorld dreimal pro Schleifendurchlauf aufgerufen werden, was die ganze Sache sehr langsam macht. Bräuchte man weitere Achsen, so erhöht sich auch die Anzahl der UpdateWorld -Aufrufe. Code: [AUSKLAPPEN] Graphics3D 800,600,0,2
SetBuffer BackBuffer() Local Timer=CreateTimer(100) Local Camera=CreateCamera() Local Light=CreateLight() Local Cube1=CreateCube() Local Cube2=CreateCube() Local Sphere=CreateSphere(32) Local Angle#,X#,Y#,Z# CameraProjMode Camera,2 CameraZoom Camera,0.25 PositionEntity Camera,0,0,-6 PositionEntity Sphere,0,0,0 PositionEntity Cube1,-2.5,0,0 PositionEntity Cube2,+2.5,0,0 RotateEntity Light,60,-60,0 EntityType Sphere,1 EntityType Cube1,2 EntityType Cube2,2 Collisions 1,2,2,2 Const OffSet#=0.2 While Not KeyHit(1) Angle=Angle+0.5 If KeyDown(203) Then MoveEntity Sphere,-0.02,0,0 If KeyDown(205) Then MoveEntity Sphere,+0.02,0,0 If KeyDown(200) Then MoveEntity Sphere,0,+0.02,0 If KeyDown(208) Then MoveEntity Sphere,0,-0.02,0 PositionEntity Cube1,Sin(Angle)*2-2.5,0,0 PositionEntity Cube2,Sin(Angle)*2+2.5,0,0 TurnEntity Cube1,0,0,0.1 ; UpdateWorld X=EntityX(Sphere) Y=EntityY(Sphere) Z=EntityZ(Sphere) PositionEntity Sphere,X-OffSet,Y,0:UpdateWorld PositionEntity Sphere,X+OffSet,Y,0:UpdateWorld PositionEntity Sphere,X,Y,0:UpdateWorld WaitTimer(Timer) RenderWorld Text 20,20,XS Flip 0 Wend End Von daher ist es eventuell ratsam, wenn man absolut nicht auf bewegte Zielobjekte verzichten kann und diese auf Polygonkollision reagieren müssen, auf andere Grafikengines zu wechseln. Eventuell geht das ganze aber auch mit einer Boxkollision, die ohnehin schneller ist. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
X-tra |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
okay, mmmm wenn ich also nichts bewegen würde, sondern nur so eine statische seitliche kollision, was sollte ich dann tun?
ich hatte mir auch überlegt, da ich ja eh eine bodenkollision habe, ich meinen level so gestalte, wo diese bodenkollision nötig ist, ich als ein objekt mache. und alles was seitlich geprüft werden müsste, eben seperat, und dann hätte ich nur noch das problem, dass ich die vorherige position immer speichern bzw. ablegen muss, und wenn eine kollision mit diesen seitenteilen erfolgt, die vorherige x und z position wieder hergestellt wird. sonst eine idee, wie du das mit den triangles meintest, weiß ich jetzt nämlich grad nicht. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da du dich aller anscheinend nach bereits mit Triangles beschäftigt hast, nehme ich an, dass du weist das Triangles nur von der Grafikkarte gezeichnet werden, wenn diese von der Kamera aus gesehen im uhrzeigersinn gezeichnet werden (das gilt natürlich nur, wenn EntityFX![]() Ausserdem kann keine Kollision statt finden wenn das zu kollidierende Objekt das Frame zuvor sich innerhalb einer solcher Fläche befindet. Also bereits von unten einer solchen Plattform gekommen, dann innen drin sich befindet und anschliessend wieder nach unten fällt. Es muß also zuerst die Schwelle über der Kollisionsfläche passieren, damit es beim runter fallen da drauf landen kann. Daher sollte man so eine Plattform ähnlich wie ein Cube erstellen, wo eben keine ''Eindringmöglichkeit'' sich befindet. Damit unterscheiden sich die Kollisionen unter Blitz3D von BlitzBasic, da unter BlitzBasic eine Kollision eine tatsächliche Kollision ist, während unter Blitz3D eine Kollision nur von der Bewegung aus statt findet. Dafür erkennt die Blitz3D -Kollisione auch solche, die pro Frame eine so große Bewegungsschrittweite haben, da in keinem Frame selbst eine Kollision stattfindet, sondern eine rein berechnete. Unter BlitzBasic würden solch starke Bewegungen garnicht registriert, sondern einfach überflogen werden. Leider unterstützt Blitz3D keine Polygonkollision, wenn sich das Zielobjekt selbst auf das zu kollidierende bewegt. Mit meinem Code da oben habe ich aber genau dieses zu verhindet versucht, was aber als Endspiellösung nicht zu gebrauchen ist, da es zu langsam wird mit 5 Updateworld -Aufrufen/Frame bei einem 2D Game und 7 mal bei 3D. Ich kann dir jetzt aber nicht mit Bestimmtheit sagen, dass dieses Problem auch bei EntityRadius auf EntityBox so ist. Da gilt es ausprobieren. Ich habe das noch nicht ausprobiert, da ich es auch bisher noch nie gebraucht hatte. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
X-tra |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ach, jetzt weiß ich, aber bin mir nicht sicher, ob wir gerade aneinander vorbeireden.
du meinst, dass ich an der seite einer solchen plattform auch eine kollisionsprüfung machen soll und eben diesen seitenteilen einen typ zuweisen muss. problem ist, dass ist ein komplettes objekt, also oben, wo ich drauf stehen will, und seitlich, ist das gleiche, wobei ja seitlich nicht das gleiche ist wie oben, da ja an der seite wenn ich gerade daneben stehe, keine gravitation vorhanden ist, zumindest nicht gegen dieses seitenteil. also wäre nur die option deckfläche oben, und seitenteile als seperate objekte bauen und laden und ansprechen. das mit den triangles hab ich trotzdem nicht verstanden, also was sie sind schon, und mit dem von einer seite begehbar, okay, aber ich hab den kompletten sinn mit meinem problem nicht kapiert, oder stell ich mich zu blöd an? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group