2017-09-25 18 views
0

Je travaille actuellement sur un jeu en 2d dans lequel un sprite joueur pousse d'autres sprites sur l'écran.Java slick2d déplacer un objet toutes les x secondes

Mon code actuel (dans les sous-classe): // x et y étant co-ords je veux cet objet pour passer (par exemple 50 pixels droite de son point de départ, etc.)

public Boolean move(float x, float y, int delta) { 
     this.setx(x); 
} 

Comment faire pour que l'objet se déplace, disons 50 pixels toutes les secondes? ou alternativement tous les x cadres.

J'ai essayé d'utiliser delta mais cela résulte en un mouvement fluide qui est beaucoup plus difficile à contrôler pour mes besoins particuliers.

Toute aide serait appréciée

Répondre

1

Votre approche pour l'accomplir avec les deltas est juste. En supposant que vous avez votre méthode de déplacement à l'intérieur de votre méthode de mise à jour et l'appelez ici (ou en l'implémentant de la même manière). Une façon que vous pourriez réaliser celles-ci seraient les suivantes:

class YourGameStateWithUpdateRenderInit extends BasicGameOrWhatever{ 

//Global variables for updating movement eacht second. 
float myDelta = 0; // your current counter 
float deltaMax = 1000; // 1 second, determines how often your object should move 

public void update(...){ 
     objectToMove.move(50,50,delta); //The object which contains the move method and you move it by 50 x/y per second. 
     } 
} 

l'intérieur de votre classe objectToMove vous avez votre méthode move:

public Boolean move(float x, float y, float pDelta) { 
    myDelta += pDelta; 
    if(myDelta >= deltaMax){ 
    this.setx(x); 
    myDelta = 0; 
    } 
} 

Cela devrait fonctionner pour une mise à jour chaque seconde. Cependant cette implémentation n'est pas vraiment bonne ou précise puisque comme vous l'avez dit vous avez probablement cette méthode de déplacement dans une sous-classe ou quelque chose de similaire. Vous devez donc l'adapter à vos besoins, mais j'espère que vous en aurez l'idée. Je pense que cela démontre le but de compter un attribut de classe par les valeurs delta jusqu'à une certaine valeur (par exemple 1000 pendant 1 seconde) et ensuite de le remettre à zéro.