1 registered members (AndrewAMD),
1,213
guests, and 2
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Schwerkraft mit Kollisionsabfrage
#353407
01/09/11 21:49
01/09/11 21:49
|
Joined: Sep 2010
Posts: 26 Germany
neo_scripting
OP
Newbie
|
OP
Newbie
Joined: Sep 2010
Posts: 26
Germany
|
Hi, Ich erstelle mit dieser Funktion einen Cube:
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
|
|
|
Re: Schwerkraft mit Kollisionsabfrage
[Re: Liamissimo]
#353457
01/10/11 14:58
01/10/11 14:58
|
Joined: Apr 2008
Posts: 650
Sajeth
User
|
User
Joined: Apr 2008
Posts: 650
|
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...
Teleschrott-Fan.
|
|
|
Re: Schwerkraft mit Kollisionsabfrage
[Re: neo_scripting]
#353464
01/10/11 16:13
01/10/11 16:13
|
Joined: Sep 2010
Posts: 26 Germany
neo_scripting
OP
Newbie
|
OP
Newbie
Joined: Sep 2010
Posts: 26
Germany
|
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. 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.
|
|
|
Re: Schwerkraft mit Kollisionsabfrage
[Re: neo_scripting]
#353467
01/10/11 16:26
01/10/11 16:26
|
Joined: Apr 2008
Posts: 650
Sajeth
User
|
User
Joined: Apr 2008
Posts: 650
|
Dann entfern den unnützen part hier:
while (1)
{
if (mouse_left == 1)
{
und c_trace funktioniert wunderbar. Ansonsten halt mit c_move (ohne Glide) nach unten machen.
Teleschrott-Fan.
|
|
|
Re: Schwerkraft mit Kollisionsabfrage
[Re: neo_scripting]
#353475
01/10/11 16:40
01/10/11 16:40
|
Joined: Sep 2010
Posts: 26 Germany
neo_scripting
OP
Newbie
|
OP
Newbie
Joined: Sep 2010
Posts: 26
Germany
|
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:
while (1)
{
if (mouse_left == 1)
{
...
}
wait(1);
}
Das mit c_trace werde ich gleich nochmal ausprobieren.
|
|
|
Re: Schwerkraft mit Kollisionsabfrage
[Re: neo_scripting]
#353478
01/10/11 16:56
01/10/11 16:56
|
Joined: Jun 2008
Posts: 428
Rasch
Senior Member
|
Senior Member
Joined: Jun 2008
Posts: 428
|
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.
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);
}
}
|
|
|
Re: Schwerkraft mit Kollisionsabfrage
[Re: neo_scripting]
#353486
01/10/11 18:13
01/10/11 18:13
|
Joined: Jun 2008
Posts: 428
Rasch
Senior Member
|
Senior Member
Joined: Jun 2008
Posts: 428
|
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 Gerne geschehen
|
|
|
|