Türen offen lassen
Übersicht

BadDeathBetreff: Türen offen lassen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Einen wunderschönen guten Morgen ihr Coder!
Ich habe vor Türen in mein Spiel einzubauen, deren Eigenschaften in einer ini-Datei stehen. Einen für mich ausreichenden Parser schrieb ich schon, sowie eine Funktion zum Erstellen dieser Türen. Zum Anfang sollen es nur Schiebetüren werden, die auf der X-Achse entglang gleiten. Mein Code: Code: [AUSKLAPPEN] For d.Door = Each Door
Select d\State$ Case "Closed" If EntityDistance(Spieler, d\Mesh) =< d\Radius Then d\State$ = "Open" Case "Opened" If EntityDistance(Spieler, d\Mesh) > d\Radius Then d\State$ = "Close" Case "Open" If EntityX(d\Mesh) - d\PosX < d\Distance Then MoveEntity d\Mesh,d\Speed,0,0 Else MoveEntity d\Mesh,-d\Speed,0,0 d\State$ = "Opened" End If Case "Close" If EntityX(d\Mesh) => d\PosX Then MoveEntity d\Mesh,-d\Speed,0,0 Else d\State$ = "Closed" End If End Select Next Mein Problem: Wenn ich nun den Radius erreiche, gleitet die Tür nach links auf, dann wieder nach rechts (Sicht nach Süden). Wenn ich in dem Radius bleibe, rutscht sie immer von links nach rechts, von rechts nach links.... Nur wenn ich auserhalb des Radius bin, geht sie wieder nach rechts und verharrt an dieser Position. Meine Frage: Wie erreiche ich es, dass die Tür, solange ich mich im Radius befinde, offen bleibt und nicht immer wieder zu geht? DANKE! MfG, BadDeath |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dein Problem ist der vergleich.
Du kannst da nicht mit actordistance arbeiten. du musst gegen die "ursprungsposition" der türe testen, wo sie im geschlossenen zustand ist. denn sonst wird der abstand automatisch grösser wenn die türe wegrutscht und kann so gegebenenfalls in den close zustand wechseln |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die schnelle Antwort - es geht sogar! ![]() Für die, die das selbe Problem haben sollten: Code: [AUSKLAPPEN] For d.Door = Each Door DisX#=(d\PosX#-EntityX(Spieler,1)) DisY#=(d\PosY#-EntityY(Spieler,1)) DisZ#=(d\PosZ#-EntityZ(Spieler,1)) Dist#=Sqr(Sqr(DisX#^2+DisZ#^2)^2+DisY#^2) Select d\State$ Case "Closed" If Dist# =< d\Radius Then d\State$ = "Open" Case "Opened" If Dist# > d\Radius Then d\State$ = "Close" Case "Open" If EntityX(d\Mesh) - d\PosX < d\Distance Then MoveEntity d\Mesh,d\Speed,0,0 Else MoveEntity d\Mesh,-d\Speed,0,0 d\State$ = "Opened" End If Case "Close" If EntityX(d\Mesh) => d\PosX Then MoveEntity d\Mesh,-d\Speed,0,0 Else d\State$ = "Closed" End If End Select Next Kann geschlossen werden. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das ganze geht noch schneller. Ersetz
Dist#=Sqr(Sqr(DisX#^2+DisZ#^2)^2+DisY#^2) mit Dist#=Sqr(DisX#^2+DisZ#^2+DisY#^2) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Okay, danke!
Mit Sound und nem ordentlichen Mesh siehts richtig gut aus xD Danke nochmal, BadDeath |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group