Je développe un jeu qui consiste en quelques vues sur l'écran qui sont déplacées et que vous pouvez interagir avec eux.Quand repeindre toute l'interface utilisateur d'un jeu (sans le ralentir sur les appareils bas)
Je modifie le x, y et la largeur et la hauteur de ces vues en utilisant ObjectAnimator.
J'ajoute plus de vues et je supprime certaines vues et je les rajoute toutes les X secondes avec de nouvelles coordonnées et de nouvelles échelles.
Pour mettre à jour l'écran j'invalidant toutes les 10 millisecondes ensemble de la collection d'éléments à l'écran avec cette méthode d'exécution sur un fil:
public void run() {
while(!backgroundThread.interrupted()) {
synchronized(this){
wait(10);
doSomeStuffInOtherThread(); //like adding more items or moving them, etc...
allMyObjects.invalidateInOtherThread(); //this is just pseudocode for simplify the sample
}
}
}
Il fonctionne sur des appareils puissants les articles sont repeints chaque 10 ms et il donne à l'utilisateur une sensation de framerate lisse. Le problème est que lorsque je teste le jeu sur des appareils bas, le jeu est très lent. Je pense que c'est parce que les méthodes doSomeStuffInOtherThread() et allMyObjects.invalidate() InOtherThread prennent trop de choses à exécuter sur les périphériques bas, plus de 10ms, et sur les périphériques haut de gamme, c'est fait instantanément (en moins de 10ms).
Il existe une meilleure façon de repeindre l'écran sans perdre de la vitesse de jeu? Si le jeu est en perte de vitesse, ce n'est pas un problème. Le problème est que c'est une perte de vitesse.
Merci
Que voulez-vous dire "perdre de la vitesse"? Peut-être que l'utilisation du temps écoulé depuis la dernière image dans vos calculs le ferait. – Zouch
@Zouch Je veux dire que si je déplace les objets sur un appareil puissant, ils se déplacent très rapidement, si je les déplace dans un appareil bas de gamme, ils se déplacent très lentement. Je suis assez sûr que le problème est que dans les appareils inférieurs 10ms n'est pas suffisant pour calculer le contenu de ces deux fonctions. S'il vous plaît, expliquez votre proposition, je ne peux pas comprendre ce que vous essayez de me dire – NullPointerException
Vous devriez [lire ceci] (http://gafferongames.com/game-physics/fix-your-timestep/). Je vais élaborer plus tard! – Zouch