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.
X_COLLISION (Kugel) um den Spieler herum.
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 ;)
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 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.
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...
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...
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?
so wie ich sagte!
Bevor du den Spieler bewegs:
Pseudocode:
Alt_X = PlayerX
Alt_Y = PlayerY
Alt_Z = PlayerZ
IF Collision
PlayerX = Alt_X
PlayerY = Alt_Y
PlayerZ = Alt_Z
ELSE
Spielerbewegen
ENDIF
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.
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.
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:
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 ;)
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.
!? Was willst Du denn haben?
Ideal wäre eine Objektbezogene Kollisionsabfrage.
Vielleicht sowas wie bei BB(ich weiß abkupfern is nich so dolle)
COLLISIONS TypeQ, TypeZ, Methode, Reaktion
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.
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....................
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.
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.
Ich bau das auch genau so in das EntitySystem ein (wenn mir keiner Helfen will)
Ich würd ja gern wenn ich wüßte wie.................
Jow Gernot bin dabei, Hiro(trucidare) bestimmt auch ;)
Was soll ma den machen?
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?
Past schon ;)