Schwerkraft mit Kollisionsabfrage

Posted By: neo_scripting

Schwerkraft mit Kollisionsabfrage - 01/09/11 21:49

Hi,

Ich erstelle mit dieser Funktion einen Cube:

Code:
function create_cube() // Erstellt einen Würfel
{
	while (mouse_left == 1) {wait(1);} // Wartet bis Maustatse losgelassen wird
	while (1)
	{
		if (mouse_left == 1)
		{
			
			create_pos.x = mouse_pos.x;
			create_pos.y = mouse_pos.y;
			create_pos.z = camera.z;
			vec_for_screen (create_pos, camera);
			ent_create ("hauptgebäude.wmb", create_pos, NULL);
			
			
			
		}
		wait(1);
	}
	
}



Nun meine Frage:

Wie lasse ich die Schwerkraft auf diesen erstellten Cube wirken und gleichzeitig eine Kollisionsabfrage mit dem Levelboden?


MfG

neo_scripting
Posted By: Liamissimo

Re: Schwerkraft mit Kollisionsabfrage - 01/09/11 22:46

Mit der Physik-Enginge, such mal in der Manual nach "PhysX" wink
Posted By: Sajeth

Re: Schwerkraft mit Kollisionsabfrage - 01/10/11 14:58

sieht aber eher aus, als würdest du das gebäude auf den boden pflanzen wollen. Benutz dafür c_trace.

Und übrigens ist dein code ziemlich seltsam... je nach FPS kann es sein, dass der dir mehrere Hundert hauptgebäude.wmb (würde da auch den Umlaut entfernen) pro Sekunde setzt...
Posted By: neo_scripting

Re: Schwerkraft mit Kollisionsabfrage - 01/10/11 16:13

Quote:
sieht aber eher aus, als würdest du das gebäude auf den boden pflanzen wollen. Benutz dafür c_trace.



Das will ich ja eig. bezwecken, nur aus irgendeinem Grund funktioniert es nicht, daher kam ich auf die Idee dieses Problem mit Hilfe der Gravitation und einer Kollisionsabfrage zu beheben.

Quote:
je nach FPS kann es sein, dass der dir mehrere Hundert hauptgebäude.wmb (würde da auch den Umlaut entfernen) pro Sekunde setzt...


Ja das ist mir auch direkt danach aufgefallen. Will es noch so umschreiben dass nach Erstellung eines Gebäudes die Funktion endet.
Posted By: Sajeth

Re: Schwerkraft mit Kollisionsabfrage - 01/10/11 16:26

Dann entfern den unnützen part hier:
Code:
while (1)
	{
		if (mouse_left == 1)
		{


und c_trace funktioniert wunderbar. Ansonsten halt mit c_move (ohne Glide) nach unten machen.
Posted By: neo_scripting

Re: Schwerkraft mit Kollisionsabfrage - 01/10/11 16:40

Ich klicke erst einen Button an und anschließen Klicke ich mit der Maus ins Level und an dieser Stelle soll dann das Gebäude gesetzt werden, somit benötige ich ja den Part:

Code:
while (1)
{
      if (mouse_left == 1)
      {
          ...
      }

      wait(1);
}




Das mit c_trace werde ich gleich nochmal ausprobieren.
Posted By: Rasch

Re: Schwerkraft mit Kollisionsabfrage - 01/10/11 16:56

Am besten du tracest in das level hinein. Dazu kannst du von der Kamera zur create_pos tracen und wenn du dann auf etwas triffst, das Model dort platzieren.

Ka obs genau so geht. Habs grad vergessen ab versuch mal das ^^

Damit erstellt er die Entity dort wo man hinklickt. Je nachdem wie weit weg deine Kamera ist, musst du to.z erhöhen.

Code:
function gebaeude_platzieren()
{
	VECTOR from;
	VECTOR to;

	while(1)
	{
		if(mouse_left)
		{
			while(mouse_left){wait(1);} // Warte bis Maustaste losgelassen wird.

			vec_set(from.x, camera.x); // from bei Kamera Position

			to.x = mouse_pos.x;
			to.y = mouse_pos.y;
			to.z = 5000; // Tracestrahl Reichweite
			vec_for_screen (to, camera);

			c_trace(from,to,IGNORE_PASSABLE);

			if(trace_hit)
			{
				ent_create ("hauptgebäude.wmb", hit.x, NULL); // Wenn etwas getroffen dort platzieren
			}
		}
		wait(1);
	}
}


Posted By: neo_scripting

Re: Schwerkraft mit Kollisionsabfrage - 01/10/11 18:07

Vielen Dank, so funktioniert es einwandfrei. Alleine wäre ich nie darauf gekommen, den Befehl c_trace kannte ich bis zu diesem Zeitpunkt noch gar nicht.

Nochmals Vielen Dank smile
Posted By: Rasch

Re: Schwerkraft mit Kollisionsabfrage - 01/10/11 18:13

Ok dann nochmal zum Verständniss.

c_trace sendet einen Strahl von einer Position im 3D Raum zu einer anderen. Wenn der Strahl etwas trifft gibt er verschiedene Werte zurück. In unserem Fall hit.x. Die Position wo der Strahl aufgetroffen ist. Wir setzen also from auf die 3D Position unserer Kamera. Und dann wandeln wir unsere Mausposition in eine 3D Position um. Durch unseren Z-Wert versetzen wir so gesehen von unserer Kamera aus (bzw. deinen Augen) die Mausposition um 5000 Quants nach hinten. Dort ist dann unsere to Position. Der Strahl geht nun von der Kamera zur to Position, die sehr wahrscheinlich irgendwo unter unserem Level liegt.

Ergo: Der Strahl trifft die Level Oberfläche gibt den Wert hit.x zurück und dort kreieren wir unsere Entity laugh

Gerne geschehen
Posted By: neo_scripting

Re: Schwerkraft mit Kollisionsabfrage - 01/10/11 18:35

Auch nochmal vielen Dank für die Erklärung, jetzt hab auch ich es verstanden wink
© 2023 lite-C Forums