utilisent un tampon offscreen la taille de votre commande.
d'abord le faire de manière simple. Dessinez l'ensemble du tampon d'écran défilant à la bonne position. Lorsque vous êtes prêt, vous pouvez l'ajouter à l'écran actuel. Si cela est trop lent, essayez de l'optimiser en ne redessinant pas tout le tampon d'écran mais en effectuant une division verticale: (Je ne parle ici que d'un mouvement de défilement horizontal pour rendre le concept plus facile à saisir. cette méthode s'applique également au défilement à 8 directions)
C'est un peu difficile à mettre en œuvre (c'est pourquoi j'ai suggéré l'approche simple en premier), mais essayez d'imaginer un papier avec une image dessus, et le côté gauche que vous enveloppez et Collez-le sur le côté droit (de sorte que vous obtenez un tube). De cette façon, vous pouvez faire défiler le papier indéfiniment (en tournant le tube autour de son axe y).
De même, vous pouvez faire la même chose avec le tampon hors écran. Préparez le tampon hors écran en dessinant le contenu complet sur celui-ci.
Maintenant, pour faire défiler vers la droite, vous divisez essentiellement le tampon hors écran en 2 (par le biais de cette division verticale (tout comme le papier dans l'exemple où la colle était)). supposons que vous faites défiler 10 pixels vers la droite, ce que vous faites est:
- copier le côté droit de la division (situé au pixel 10) au pixel 0 de votre contrôle. (donc la région entière de (10, 0) - (largeur - hauteur) à: (0,0)
- puis copiez le côté gauche de la division: pixel 0 à 10 à la largeur de pixel-10. 0,0) - (10, hauteur) à (largeur-10, 0)
avant de faire cela SEULEMENT redessiner les pixels qui ont été modifiés (dans ce cas 10 pixels depuis que nous avons fait défiler 10 pixels) Tous les autres pixels sont identiques et n'ont pas besoin d'être redessinés
Vous devrez le dessiner vous-même sur un papier pour le comprendre.C'est une technique assez courante avec le développement de jeux sur des plateformes où les ressources sont limitées (téléphones mobiles, etc.)
p.s.le défilement dans toutes les directions peut être réalisé de la même manière (même si c'est encore plus difficile à obtenir); ^)
Au cours de ma pensée sur cette autre question connexe a été soulevée. Si vous trouvez la question intéressante, il y a des chances pour que celle-ci soit aussi intéressante :) http://stackoverflow.com/questions/1635699/how-to-synchronize-content-of-one-view-depending-on -scroll-position-en-sibling-sc – SoManyDetails