2013-09-01 8 views
5

Wir verwenden jme3 und ein Problem mit dem BetterCharacterControl ist, dass setMaxSlope nicht implementiert ist. Der Entwickler des Motors sagt, dass wir uns selbst lösen können sie den neuen Controller:Wie geht man Treppen und Hänge?

http://hub.jmonkeyengine.org/forum/topic/setmaxslope-for-bettercharactercontrol/

Und ich würde wirklich wie eine Lösung, da my game braucht. Ich fragte sie vor, aber wir haben es nicht lösen:

How to improve character control for my 3D game?

Können Sie uns helfen, Fortschritte? Ich habe ein Video mit dem Problem erfasst:

http://www.youtube.com/watch?v=PF_UzoOXD0E

Teil der Dokumentation ist hier: http://hub.jmonkeyengine.org/wiki/doku.php/jme3:advanced:walking_character?s[]=bettercharactercontrol#bettercharactercontrol

Meine Bemühungen, die Funktionalität an den Controller hinzuzufügen:

package adventure; 

import com.jme3.math.Vector3f; 
import com.jme3.bullet.control.BetterCharacterControl; 

public class GameCharControl extends BetterCharacterControl { 
    protected Vector3f lastlocation = new Vector3f(); 

    public GameCharControl(float x, float y, float z) { 
     super(x, y, z); 
    } 

    @Override 
    public void update(float tpf) { 
     super.update(tpf); 
     System.out.println("location " + location); 
     System.out.println("lastlocation " + lastlocation); 

     if (location.equals(lastlocation)) { 
      System.out.println("update2"); 
      this.setHeightPercent(101); 
     } 
     rigidBody.getPhysicsLocation(location); 
     applyPhysicsTransform(location, rotation); 
     lastlocation = location; 
    } 
} 

Aber der oben macht keine Änderung oder wenn ich Höhe auf 101 setze, wird es schwierig für den Spielcharakter zu bewegen. Können Sie uns helfen zu sehen, was getan werden sollte?

+1

okay, ich habe null Erfahrung auf diesem aber vielleicht meine einfache Vision helfen könnte, würde ich vorschlagen, eine Steigung der Einrichtung von der Kante nach unten, so würde es aussehen, als würde er nicht auf der Treppe hochspringen. Um das zu tun, müssen Sie wissen, ob eine Treppe in einem größeren Radius in der Nähe ist. – Dediqated

Antwort

2

Da Bewegung den Charakter als PhysicsRigidBody aus PhysicsJoint s behandelt, gibt es wahrscheinlich nicht genug nach oben oomph in seinem Bein oder Knie. Hoffentlich waren die Parameter dort nicht eingerichtet, um diese Größe der Treppe unterzubringen.

Da Sie beim Navigieren einer abgewinkelten Treppe am meisten Probleme hatten, könnte eine sekundäre Maßnahme darin bestehen, die Laufrichtung anzupassen. Ich bezweifle, dass Sie sich auf location.equals(lastlocation) verlassen können, aber innerhalb einer kurzen Distanz ist ein guter Check, um zu sehen, ob der Charakter in ein Hindernis geriet. Sobald Sie wissen, dass es einen Schritt gibt, möchten Sie es sauber skalieren oder unten bleiben.

2

Warum nicht KinematicCharacterController verwenden, der setMaxSlope implementiert hat?

Nicht sicher, die Sie JME verwenden, aber hier ist die Quelle zu diesem Controller:

https://code.google.com/p/jbullet-jme/source/browse/branches/jbullet/src/com/bulletphysics/dynamics/character/KinematicCharacterController.java

+0

Ich bin mir nicht sicher, aber ich denke, dass es zu alt und veraltet sein könnte. Der jme3-Entwickler sagte im Forum, dass wir an BetterCharacterControl arbeiten und die setMaxSlope-Methode hinzufügen sollten, aber es ist schwierig. –

+1

Sie haben wahrscheinlich recht, ich konnte den KCC sowieso nicht an einem Spiel von mir arbeiten lassen ... vielleicht war ich es oder vielleicht ist der Code fehlerhaft. Ich habe einfach aufgegeben, es zu benutzen und habe meine eigene Kollisionserkennung durchgeführt (zum Glück war mein Spiel "einfach" genug, dass dies plausibel war). – ClickerMonkey

Verwandte Themen