y-collisionen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

pupser

Betreff: y-collisionen

BeitragDo, Dez 16, 2004 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Tach!
ich machs kurz und knapp (nach langen ausprobieren):
wie kann man feststellen ob ein Objekt auf dem Boden steht.
Also in einer Map auf dem boden steht und nicht drunter klebt, oder irgentwie seitlcih an wänden dranklebt, sondern auf dem boden steht. Wie überprfüfe ich solche Kollisionen?
Ich erwarte jetzt (will ich auch eigentl. gar nicht) irgenteinen Script.
Nur mal anregungen, das heist blitz3d-funktionen die weiterhelfen könnten oder so.

Danke

Xalon

BeitragDo, Dez 16, 2004 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn ich deine frage richtig verstanden hab:

BlitzBasic: [AUSKLAPPEN]
CollisionY


Xalon
 

pupser

BeitragDo, Dez 16, 2004 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ích bin mir nicht sicher.
bisher hab ichs mit collisionNY ausprobiert...
Nimm mal Stellungname
 

Dreamora

BeitragDo, Dez 16, 2004 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
CollisionY() stimmt schon. Nur geht das davon aus, dass bei deinem Model der 0,0,0 punkt unten an den füssen ist. Ansonsten musst du noch eine entsprechendes +- machen, da du mit dem 0,0,0 vergleichst, nicht mit "Füssen" oder sonstwas.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

pupser

BeitragDo, Dez 16, 2004 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hatte och erwähnt das ich entityradius benutze?!

wie meinteste das jetzt mit +-?

edit:
vielleicht sollte ich noch ein kollisionsobjekt für die füße machen, was meint ihr?
 

Dreamora

BeitragDo, Dez 16, 2004 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du mit EntityRadius arbeitest, muss der 0, 0, 0 Punkt innerhalb des Objektes genau in der Mitte des Objektes sein ( zumindest in der vertikalen Mitte ), da sonst die Kugel unten sehr weit überragt und sie schwebt oder nicht ganz nach unten reicht und darum die Füsse im Boden versinken.

Wo ist denn das genaue Problem?

Ich vermute mal du hast die entsprechenden Collisionstypen gesetzt, auch beim Level und du machst eine Sphere to polygon kollisionsprüfung zwischen dem Spieler und dem Level Kollisionstyp oder?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

pupser

BeitragDo, Dez 16, 2004 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
yepp!
so siehts aus. Kollisionstyp 2.
Ich poste mal meinen Code:

BlitzBasic: [AUSKLAPPEN]


colss=CountCollisions(p\player)
If EntityCollided(p\player, c_map) Then
For col=1 To colss
boden = CollisionY(p\player, col)
Next

If boden<EntityY(p\player) Then
sprung=0 ;nicht drauf achten Wink
i=0
EndIf
EndIf



Es geht hat darum wie der die variable "i" setzten soll, im falle einen Falles Very Happy soll sie bei 0 anfangen und dann hoch zählen. damit der direkt nach unten fällt. Sprung is dazu nur ne art hilfs variable.
 

Klaas

BeitragDo, Dez 16, 2004 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
die ausrichtung des Objektes stellt man über die collisionsNormale fest.

collisionY sagt ja nur in welcher höhe er Kolidiert ist, nicht in welcher Ausrichtung.
 

pupser

BeitragDo, Dez 16, 2004 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ausrichtung?
collisionnormals?-steht auch nicht in der OH
 

Klaas

BeitragFr, Dez 17, 2004 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Kollisionsnormale besteht aus:
CollisionNX
CollisionNY
CollisionNZ
Das ist die Ausrichtung des Polygons auf das das Objekt aufgeschlagen ist.
Damit kannst du feststellen ob das Poly eine Wand,Decke oder Boden ist.
 

pupser

BeitragFr, Dez 17, 2004 16:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Soweit war ich eigentlich auch schon.

Code: [AUSKLAPPEN]
If EntityCollided(p\player, c_map) Then
   For col=1 To colss
      dump = CollisionNY(p\player, col)
   Next
   
   If dump<EntityY(p\player) Then
                ;hiermit kann ich das jetz eigentl. abfragen oder?

      sprung=0
      i=0
   EndIf
EndIf


....
Ist die Grundidee denn richtig?
 

Dreamora

BeitragFr, Dez 17, 2004 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
nein ist es nicht

dumb muss CollisionY() sein
und wenn es auf der richtigen höhe ist kannst du es mit collisionny() richtig ausrichten
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

pupser

BeitragSa, Dez 18, 2004 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Besonders ausführliche Hilfe bekommt man von euch ja nich...
Ich würde doch so nen thread nicht aufmachen, wenn ich nur befehle ohen gute Beschreibung wissen wollte, die kann ich auch in der OH nachlesen. Geht's nicht ein bischen ausführlciher als wenn jeder einen Satz schreibt. Z.B. mal ne idee
reinbringen wie man das Lösen kann oder so. Nicht nur schreiben "falsch"
wenn ich nen code poste, sondern dazu mal richtig stellungnehmen.
Ich muss euch alles aus der Nase ziehen. nenenenenene Rolling Eyes

ps: was soll ich denn ausrichten? Ich will doch garnichts ausrichten?!
ich will doch nur überprüfen ob er auf dem boden steht oder nicht.
 

hot-bit

Gast

BeitragSa, Dez 18, 2004 13:55
Antworten mit Zitat
Hoi.

Hmmm...

Zitat von >Die Wurst< :
Zitat:
mag sein... aber da ich nichts zu hören bekomme, ist es einfacher sich 3 stunden damit auseinander zu setzen, als 5 tage lang vollgemeckert zu werden....


Der hat es wenigstens schon kapiert Smile

Du bist leider ein hartnäckigerer Fall, oder einfach nur .... (zu faul) Smile

Toni
 

Dreamora

BeitragSa, Dez 18, 2004 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habs dir oben ja wohl ausführlich erklärt, aber nochmal falls du nicht lesen kannst / willst:

Zuerst erstellst du die Kollisionstypen für die verschiedenen Objekte.
Da die Figur ja SphereCollision hat ( entityRadius ) einfach den EntityRadius auf halbe meshhöhe setzen: entity, meshheight( entity ) / 2

Danach musst du lediglich in der Mainloop eine Kollision zwischen diesen 2 Kollisionstypen testen ( Collisions FigurTyp, LevelTyp, 2, 2 ) sowie UpdateWorld benutzen.

Um danach das Mesh richtig zu positionieren einfach im Falle einer Kollision die Entity an position: positionentity entity, entityx(entity), collisiony( ... ) + entityheight(entity)/2, entityz(entity) setzen

das sollts schon gewesen sein.

PS: teils nur pseudocode verwendet, da ich selbst die blitz interne kollision nicht benutze
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group