6 registered members (AndrewAMD, Ayumi, degenerate_762, 7th_zorro, VoroneTZ, HoopyDerFrood),
1,268
guests, and 6
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
intelligente Tür
#133738
06/04/07 18:18
06/04/07 18:18
|
Joined: Jan 2005
Posts: 134 Germany
TTKJonas
OP
Member
|
OP
Member
Joined: Jan 2005
Posts: 134
Germany
|
Hallo, Ich möchte gerne ein Türscript erstellen, das ein paar ganz spezielle Anforderungen hat Ich versuche es mal zu erklären: Alle Türen in meinem Level öffnen sich selbtständig, sobald sich der Spieler nähert. Nun öffnen sich die Türen bei meinem jetzigen Script aber immer in die selbe Richtung, jenachdem wie sie gedreht sind. Das führte dazu, das sich die Tür manchmal durch den Spieler bewegte. Das habe ich dann dadurch gelöst, das sich die Tür entwerder schon sehr früh, oder relativ schnell öffnet. Das ist aber in vielen Fällen keine besonders gute Lösung. Deswegen möchte ich mein Türscript nun nochmal überarbeiten. Allerdings fehlt mir noch der passende Ansatz, wie ich so ein Script anfangen soll. Das neue Script soll folgendes können: Wenn sich der Spieler der Tür nähert, soll die Tür selbstständig erkennen aus welcher Richtung der Spieler kommt und sich dann in die entgegengesetze Richtung öffnen. Knackpunkt ist hierbei, das es egal sein sollte wie die Tür im Level gedreht ist (sie steht natürlich immer aufrecht). Um das besser zu veranschaulichen, hab ich ein Bild gezeichnet: Hat jemand eine Idee wie das Script dafür aussehen könnte? Gruß Jonas
Last edited by TTKJonas; 06/04/07 18:37.
|
|
|
Re: intelligente Tür
[Re: TTKJonas]
#133739
06/04/07 19:05
06/04/07 19:05
|
Joined: Jun 2006
Posts: 2,640 Earth
Germanunkol
Expert
|
Expert
Joined: Jun 2006
Posts: 2,640
Earth
|
also, scripten würd länger dauern, das kann ich dir grad nicht. Die erste idee die mir kommt ist:
wenn er in reichweite kommt (hast du schon, das kannst du so lassen wie's ist) dann: var approach_angle[3]; vec_diff(temp,player.x,tür.x); vec_to_angle(approach_angle,tür);
Jetzt hast du in approach_angle.pan den pan aus dem der spieler kommt. den vergleichst du mit dem tür.pan. wenn das eine minus das andere etwas bestimmes gibt, dann drehst du nach links, ansonsten nach rechts....?
versuch das mal. für "etwas bestimmtes" musst du rumprobieren... weis grad nicht, kommt drauf an welches du von welchem abziehst und so...
weist du was ich meine?
viel glück! Micha
~"I never let school interfere with my education"~ -Mark Twain
|
|
|
Re: intelligente Tür
[Re: TTKJonas]
#133740
06/04/07 19:21
06/04/07 19:21
|
Joined: Jan 2007
Posts: 1,619 Germany
Scorpion
Serious User
|
Serious User
Joined: Jan 2007
Posts: 1,619
Germany
|
ich würde das so lösen: erst gucks du wie gewohn, ob der spieler in reichweite ist, wenn ja nimmst du 2 punkte die relativ zur tür sind und bestimmst welcher näher ist...: z.b.: Code:
action door { var standart_rotation[3]; vec_set(standart_rotation,my.pan); while(1) { if(vec_dist(my.x,player.x)<300) { vec_set(temp,vector(0,20,0)); vec_rotate(temp,standart_rotation); vec_add(temp,my.x);
vec_set(target,vector(0,-20,0));//abuse target-vector vec_rotate(target,standart_rotation); vec_add(target,my.x); if(vec_dist(temp,player.x)<vec_dist(target,player.x)) { while(abs(my.pan-standart_rotation.pan)<90) { my.pan+=5*time_step; wait(1); } } else { while(abs(my.pan-standart_rotation.pan)<90) { my.pan-=5*time_step; wait(1); } } while(vec_dist(my.x,player.x)<400){wait(1);} if(my.pan>standart_rotation.pan) { while(abs(my.pan-standart_rotation.pan)<2) { my.pan-=5*time_step; wait(1); } } else { while(abs(my.pan-standart_rotation.pan)<2) { my.pan+=5*time_step; wait(1); } } my.pan = standart_rotation.pan; } wait(1); } }
PS: wouldn't it be easy when that forum would support highlighting...?
Last edited by Scorpion; 06/04/07 19:22.
|
|
|
Re: intelligente Tür
[Re: Scorpion]
#133741
06/05/07 07:51
06/05/07 07:51
|
Joined: Apr 2005
Posts: 4,506 Germany
fogman
Expert
|
Expert
Joined: Apr 2005
Posts: 4,506
Germany
|
Noch eine Methode: Die Türen könnten zwei Scankegel (grün im Bild) in jede Richtung werfen. Wenn der Spieler dann erfasst wird weißt Du von wo er kommt. Ich denke es reicht, wenn Du alle 0.3 Sekunden scannst.
no science involved
|
|
|
Re: intelligente Tür
[Re: fogman]
#133742
06/05/07 18:21
06/05/07 18:21
|
Joined: Jan 2005
Posts: 134 Germany
TTKJonas
OP
Member
|
OP
Member
Joined: Jan 2005
Posts: 134
Germany
|
Hallo! Vielen, vielen Dank für Eure Hilfe! Ich habe das Script von Scorpion genommen. Es funktioniert ausgezeichnet. Ich musste nur noch ein paar Werte vertauschen, da sich die Tür in die falsche Richtung geöffnet und abrupt wieder geschlossen hat. Das Script sieht nun so aus: Code:
action door { wait(1); var standart_rotation[3]; vec_set(standart_rotation,my.pan); while(1) { if(vec_dist(my.x,player.x)<250) { vec_set(temp,vector(0,20,0)); vec_rotate(temp,standart_rotation); vec_add(temp,my.x);
vec_set(target,vector(0,-20,0)); vec_rotate(target,standart_rotation); vec_add(target,my.x); if(vec_dist(temp,player.x)<vec_dist(target,player.x)) { while(abs(my.pan-standart_rotation.pan)<95) { my.pan-=7*time_step; wait(1); } } else { while(abs(my.pan-standart_rotation.pan)<95) { my.pan+=7*time_step; wait(1); } } while(vec_dist(my.x,player.x)<300){wait(1);} if(my.pan>standart_rotation.pan) { while(abs(my.pan-standart_rotation.pan)>2) { my.pan-=7*time_step; wait(1); } } else { while(abs(my.pan-standart_rotation.pan)>2) { my.pan+=7*time_step; wait(1); } } my.pan = standart_rotation.pan; } wait(1); } } Vielen Dank nochmal für Eure Hilfe! Gruß Jonas
Last edited by TTKJonas; 06/05/07 18:23.
|
|
|
|