2014-07-11 5 views
0

J'essaie de créer une grille (avec un code minimal) sur laquelle les blocs peuvent s'accrocher. Ce que je veux c'est quand la souris est dans le carré de la grille, le bloc se déplace vers ce carré. Ce que j'ai écrit essentiellement dit que si les X ou Y sont au-delà du bloc de la grille, la taille du bloc passe au bloc de grille suivant. Actuellement, ce code crée une grille 3x3, bien que le code DEVRAIT générer des gridspaces infinis. Je ne peux pas déplacer le bloc en dehors de cette grille 3x3.Pourquoi cette grille Java ne fonctionne-t-elle pas correctement?

public class Player extends Entity { 
public Player(double entSize, boolean collideA, boolean collideB, double x, double y) { 
    super(entSize, collideA, collideB, x, y); 
} 
public void init() { 
    Texture texFile = loadTexture("stone"); 
    texture(false, true); 
    texFile.bind(); 
    render(); 
} 
void input() { 
    int gridPosX = 1; 
    int gridPosY = 1; 
     if(getX() > gridPosX*entSize) { 
      gridPosX += 1; 
     } if(getX() < gridPosX*entSize) { 
      gridPosX -= 1; 
     } if(getY() > gridPosY*entSize) { 
      gridPosY += 1; 
     } if(getY() < gridPosY*entSize) { 
      gridPosY -= 1; 
     } 
     this.x = gridPosX*entSize; 
     this.y = gridPosY*entSize; 
} 

} Les valeurs de X et Y sont ce qui définissent la position des blocs et des paramètres de forme.

+0

Voulez-vous dire à modifier gridPosX avant de vérifier la condition suivante? Vous voudrez peut-être envisager d'utiliser else-if à la place, je pense. – Karan

+0

Je veux mettre à jour gridPosX à chaque fois que le Mouse.getX() est supérieur au maximum X de l'espace de grille courant (gridSpace * entSize car ce sont des carrés). –

+0

Cela peut dépendre de votre implémentation, mais puisque gridPosX et Y sont toujours initialisés à 1, ils ne peuvent varier que de 0 à 2, ce qui pourrait causer votre problème 3x3. – Karan

Répondre

0

Correction en utilisant des boucles pour les incréments de grille positifs! NOUVEAU CODE:

public class Player extends Entity { 
public Player(double entSize, boolean collideA, boolean collideB, double x, double y) { 
    super(entSize, collideA, collideB, x, y); 
} 
public void init() { 
    Texture texFile = loadTexture("stone"); 
    texture(false, true); 
    texFile.bind(); 
    render(); 
} 
void input() { 
    int gridPosX = 0; 
    int gridPosY = 0; 
     for(gridPosX = 0; getX() > gridPosX*entSize; gridPosX++) { 
      gridPosX += 0; 
     } if(getX() < gridPosX*entSize) { 
      gridPosX -= 1; 
     } for(gridPosY = 0; getY() > gridPosY*entSize; gridPosY++) { 
      gridPosY += 0; 
     } if(getY() < gridPosY*entSize) { 
      gridPosY -= 1; 
     } 
     this.x = gridPosX*entSize; 
     this.y = gridPosY*entSize; 
} 

}

Questions connexes