2013-09-01 11 views
5

Usiamo jme3 e un problema con BetterCharacterControl è che setMaxSlope non è implementato. Lo sviluppatore del motore dice che possiamo risolvere noi stessi utilizzando il nuovo controller:Come camminare scale e pendii?

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

e vorrei davvero come una soluzione in quanto my game ne ha bisogno. Ho chiesto prima, ma non abbiamo risolverlo:

How to improve character control for my 3D game?

può aiutare a progredire? Ho registrato un video con il problema:

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

Alcuni documentazione è qui: http://hub.jmonkeyengine.org/wiki/doku.php/jme3:advanced:walking_character?s[]=bettercharactercontrol#bettercharactercontrol

mio sforzo per aggiungere la funzionalità per il controller:

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; 
    } 
} 

Ma quanto sopra non sta facendo alcun cambiamento o se ho impostato l'altezza su 101 allora diventa difficile muoversi per il personaggio del gioco. Puoi aiutarci a vedere cosa dovrebbe essere fatto?

+1

ok Io ho zero esperienza su questo, ma forse la mia visione semplice potuto fare, vorrei suggerire la creazione di un pendio dal bordo in giù, quindi sembrerebbe che non salti alle scale. Per farlo devi sapere se una scala è vicina in un raggio più grande – Dediqated

risposta

2

Poiché il movimento considera il carattere come PhysicsRigidBody composto da PhysicsJoint s, probabilmente non c'è abbastanza grinta verso l'alto nella gamba o nel ginocchio. Speriamo che i parametri non siano stati impostati per adattarsi a questa dimensione della scala.

Poiché si è verificato il maggior numero di problemi con la navigazione di una scala ad angolo, una misura secondaria potrebbe essere quella di regolare la direzione di marcia. Dubito che puoi contare su location.equals(lastlocation) ma a breve distanza è un buon controllo per vedere se il personaggio ha incontrato un ostacolo. Una volta che sai che c'è un passo che vuoi scalare in modo pulito o rimanere bloccato sotto.

2

Perché non utilizzare KinematicCharacterController che ha implementato setMaxSlope?

Non sai quale jme che si sta utilizzando, ma qui è la fonte di tale controller:

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

+0

Non sono sicuro, ma penso che potrebbe essere troppo vecchio e deprecato. Lo sviluppatore di jme3 ha detto nel forum che dovremmo lavorare su BetterCharacterControl e aggiungere il metodo setMaxSlope, ma è difficile. –

+1

Probabilmente hai ragione, non riuscivo a far funzionare il KCC su un mio gioco in ogni caso ... potrebbe essere stato io o forse il codice è difettoso. Ho appena smesso di provare a usarlo e ho fatto il mio rilevamento di collisione (fortunatamente il mio gioco era "semplice" abbastanza da rendere plausibile questo). – ClickerMonkey

Problemi correlati