GLBasic forum

Other languages => GLBasic - de => Topic started by: x-tra on 2007-Sep-30

Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: x-tra on 2007-Sep-30
Ich habe einen Level, als komplettmodell, und eine Spielfigur.

Wie löse ich das Kollisionsproblem am elegantesten.

Muss ich da jetzt quaderkollisionsobjekte dazu nehmen, oder eben x_collision mit kugeln.

Da der level ja nicht eine glatte fläche ist, was bietet sich da an.

Hab da auch häuser drauf usw.
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: Kitty Hello on 2007-Oct-01
X_COLLISION (Kugel) um den Spieler herum.
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: Schranz0r on 2007-Oct-01
für die Bodencollision X_COLLISIONRAY mit bezug auf Körpergröße(Spieler)

Die anderen Collisionen würde ich mit X_COLLISON machen, und den spielchen Alt_X,Alt_Y,Alt_Z ;)
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: x-tra on 2007-Oct-01
Bei collisionray müsste ich ja linien ziehen, richtig, da es aber keine ebene fläche ist, wirds wohl schwierig, oder?

und was meinst du mit
Code (glbasic) Select
Alt_X,Alt_Y,Alt_Z?

Vielleicht schon die nächste Frage die mich beschäftigt: Nämlich wenn ich eine Kollision habe mittels X_Collision, dann stellt der Befehl nur das Vorhandensein einer coll fest, nicht aber auf welcher seite.Dies wäre aber wichtig, damit man entsprechend der Kollision dann das Verhalten steuern kann.

Und dies ist nun mal notwendig, weil wenn ich mit meiner Spielfigur mit einem Haus kollidiere, wäre schon wichtig, an welcher Stelle dies passiert, um nur diese Richtung zu verbieten.

Und ist es wohl sinnvoller die map, und die gebäude fahrzeuge bäume usw seperat zu handhaben, oder?

Ich dachte man kann alles mit einer kollisionsabfrage lösen.also spieler mit welt.
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: Kitty Hello on 2007-Oct-01
A-Ha! Die Kollisionsposition und Richtung willst Du haben?
Muss ich mal programmieren. Ich hab's immer so gemacht, dass ich (falls Kollision) den Spieler da hinstelle, wo er vorher war. Bei beweglichen Platformen ist das u.U. doof -> Wenn dich die Platform aber wegschiebt, wirds noch doofer...
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: Kitty Hello on 2007-Oct-01
A-Ha! Die Kollisionsposition und Richtung willst Du haben?
Muss ich mal programmieren. Ich hab's immer so gemacht, dass ich (falls Kollision) den Spieler da hinstelle, wo er vorher war. Bei beweglichen Platformen ist das u.U. doof -> Wenn dich die Platform aber wegschiebt, wirds noch doofer...
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: x-tra on 2007-Oct-01
Jenau, sowas wär toll.
Denn wenn ich z.B. mit einer Figur mit armen mit dem linken arm an einem objekt kollidiere, und dann einfach die vorhergehende Position einnehme und sich das andere objekt sich bewegt, wirds problematisch.

Wie meinst du das, mit der vorherigen Position? Also praktisch.

Müsste ich immer die aktuelle Position vor der Kollision in Variablen speichern, die bei Kollision dann als Koordinatenwiederherstellung funkieren würden, oder denk ich ma wieder zu kompliziert?
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: Schranz0r on 2007-Oct-01
so wie ich sagte!

Bevor du den Spieler bewegs:

Pseudocode:
Code (glbasic) Select
   Alt_X = PlayerX
    Alt_Y = PlayerY
    Alt_Z = PlayerZ

IF Collision
    PlayerX = Alt_X
    PlayerY = Alt_Y
    PlayerZ = Alt_Z
ELSE
    Spielerbewegen
ENDIF
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: x-tra on 2007-Oct-01
acht mit alt, meintest du alt im sinne von uralt, grins.

irgendwie war ich auf die alt taste auf der tastatur fixiert.lach.

dann ist alles klar.
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: x-tra on 2007-Oct-24
Code (glbasic) Select
für die Bodencollision X_COLLISIONRAY mit bezug auf Körpergröße(Spieler)Kann mir das jemand erklären?

Schade dass man nicht direkt Unterscheiden kann was mit was kollidiert.
Geht zwar schon, aber is halt umständlich.
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: Schranz0r on 2007-Oct-24
naja "Objekt Collide" ist halt rechenintensiv...

Also mit dem Kolidieren zum Boden:

 www.StyleAttax.de/3D_Movement.rar
das eine Sprite halt in Drawsprite ändern ;)

Hier noch der Code mit der Bodencollision:

Code (glbasic) Select
Coll = X_COLLISIONRAY(0,0,X,Y,Z,0,-1,0) // Collision mit Boden

IF Coll > 1.5
DEC Y,anziehung // wenn "Spieler" in der luft dann Anziehung!
ENDIF

IF Coll < 1.4 // muss kleiner sein als
INC Y,0.1 // wenn erhöhung kommt dann höher setzen

IF Coll = 0 THEN DEC Y,anziehung // wenn keine Collision da ist spieler runterfallen lassen
ENDIF
Nicht sehr Elegant aber geht ;)
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: x-tra on 2007-Oct-24
stimmt nich soo dolle.

Gibts da vielleicht mal ein update mit besseren Kollisionsbefehlen.

Vielleicht hat Gernot ja mal Zeit dafür.

Weil ich in paar Tagen definitiv mit Kollisionen arbeiten muss, und oben genannte Möglichkeit ist nicht das Wahre.
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: Kitty Hello on 2007-Oct-25
!? Was willst Du denn haben?
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: x-tra on 2007-Oct-25
Ideal wäre eine Objektbezogene Kollisionsabfrage.

Vielleicht sowas wie bei BB(ich weiß abkupfern is nich so dolle)

Code (glbasic) Select
COLLISIONS TypeQ, TypeZ, Methode, Reaktion
Code (glbasic) Select
TypeQ = Quell-Objekttyp, das auf Kollision überprüft werden soll
TypeZ = Ziel-Objekttyp, mit dem es kollidieren soll
Methode = Methode der Erkennung:
1=Kugel-Kugel-Kollision
2=Kugel-Polygon-Kollision
3=Kugel-Würfel-Kollision
Reaktion = Was soll bei einer Kollision passieren:
1=stopen
2=sliden (normal)
3=sliden (nur raufsliden)
sowas in der art wäre toll, so kann man jeweils einfache Abfragen starten, ob Objekt A mit allen in Frage kommenden Objekten kollidiert, und jeweils eine Entscheidung treffen, was es tun soll.

Das geht zwar wohl so auch, wäre aber meiner Meinung nach etwas simpler.


P.S. und wenn ich das hier sehe, bekomm ich ganz feuchte Augen, grins.

Code (glbasic) Select
sphere=CREATESPHERE(32)
ENTITYTYPE sphere,1
ENTITYRADIUS sphere,1
POSITIONENTITY sphere,0,11,0

cube=CREATECUBE()
ENTITYTYPE cube,2
ENTITYCOLOR cube,0,100,0
POSITIONENTITY cube,0,-5,0
SCALEENTITY cube,10,10,10

cylinder=CREATECYLINDER(32)
ENTITYTYPE cylinder,2
ENTITYCOLOR cylinder,255,0,0
POSITIONENTITY cylinder,0,7,0
SCALEENTITY cylinder,2,2,2
Träum, träum, träum....................
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: Kitty Hello on 2007-Oct-25
ah-ha!
Naja, dann macht halt mal dieses Entity System weiter. Das ist doch net so schwer, oder?
Ich pack mal mehr kommentare rein, damit ihr (Schranz0r?) das checkt.
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: x-tra on 2007-Oct-25
ja ich check das nämlich nicht....................so ein mist.
Und mit den Kollisionen, kann man da wenigstens was machen?

Wenigstens Kollisionsabfragen zwischen Objekt A und Objekt B, so in der Art.
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: Kitty Hello on 2007-Oct-25
Ich bau das auch genau so in das EntitySystem ein (wenn mir keiner Helfen will)
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: x-tra on 2007-Oct-25
Ich würd ja gern wenn ich wüßte wie.................
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: Schranz0r on 2007-Oct-25
Jow Gernot bin dabei, Hiro(trucidare) bestimmt auch  ;)

Was soll ma den machen?
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: Kitty Hello on 2007-Oct-25
Schau in den deutschen Code Schnippseln, erster Post. Ich hab' jetzt so Kommentare eingefügt. Oh - soll ich die deutsch machen, oder geht das so?
Title: Kollision von Welt(größeres Objekt) und Spieler 3D
Post by: Schranz0r on 2007-Oct-25
Past schon ;)