Türen offen lassen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

BadDeath

Betreff: Türen offen lassen

BeitragSa, Feb 16, 2008 1:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Feb 16, 2008 3:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Feb 16, 2008 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die schnelle Antwort - es geht sogar! Very Happy

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

BeitragSo, Feb 17, 2008 0:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 17, 2008 2:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, danke!

Mit Sound und nem ordentlichen Mesh siehts richtig gut aus xD

Danke nochmal, BadDeath

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group