2017-02-06 2 views
-2

J'ai un programme de testeur qui est utilisé pour construire le début d'une partie.Comment faire en sorte que votre sprite rebondisse sur les bords de l'écran sur votre écran?

J'ai des problèmes avec les attributs de vélocité dans les instructions if qui sont supposées créer l'effet de rebond sur l'image-objet de l'écran mais je n'arrive pas à obtenir la bonne combinaison. Été travailler sur cela pendant un bon moment et ne peux pas sembler obtenir des progrès. Toute aide serait appréciée. Sur une note de côté, dans les autres méthodes, il y a un attribut appelé getWidth et getHeight, qui est censé obtenir la hauteur et la largeur de l'écran. Mais je ne sais pas si c'est le cas. Je peux joindre cette classe si nécessaire. Mais ci-dessous j'ajouterai la méthode que j'ai pour essayer de créer cet effet "Bounce" des bords de mon écran.

public void checkScreenEdge(Sprite s){ 
    if (s.getX() > getWidth()){ 

    } 
    else if (s.getX() + s.getWidth() >= getWidth()); 
    { 

    } 

    if (s.getY() > getHeight()) { 

    } 
    else if (s.getY() + s.getHeight() >= getHeight()) 
    { 

    } 
} 
+0

N'aurait pas 'x <0 || x + width> width' être plus approprié? Alors vous pouvez juste modifier la vitesse dans la direction opposée 'xVelocity * = -1'? – MadProgrammer

+0

J'espère que vous appelez méthode à un taux prédéfini par seconde. –

+0

@Abhijith: mais il est toujours préférable de calculer des tranches en temps réel –

Répondre

1

Si vous utilisez une valeur deltaX et deltaY (ou de la valeur de vitesse) pour décider dans quelle direction déplacer, il suffit de changer la valeur de positive à négative ou visa versa à l'endroit approprié. Par exemple:

if (s.getX() <= 0) { 
    s.setDeltaX(Math.abs(s.getDeltaX()); 
} else if (s.getX() + s.getWidth() >= MAX) { 
    s.setDeltaX(-Math.abs(s.getDeltaX()); 
} 

Je pense qu'il est important d'utiliser la valeur absolue plutôt que des valeurs deltax swapping directement, parce que si vous avez fait ceci:

if (s.getX() <= 0) { 
    s.setDeltaX(-s.getDeltaX()); 
} 

vous risquez de l'image-objet étant « piégé » sur les bords avec les deltas étant retournés à plusieurs reprises en raison d'un over-shoot.

+0

Quand vous dites> = Max, Qu'entendez-vous par là? Le maximum de quelle valeur? –

+0

@CaptainCode: c'est à vous de décider et de définir - la bonne bordure de votre modèle. –

+0

Pourriez-vous ne pas simplement assigner cela à la taille de l'écran? J'ai une classe qui contient automatiquement la taille de l'écran, donc je pourrais l'utiliser correctement? Ou devrais-je créer une nouvelle variable? –