HTML5 et Canvas défilement: truc intéressant ou inutile?
J'ai déjà lu tous les trucs autour de défilement:
La structuration d'une Toile HTML5/JS Jeu
et ainsi de suite:
- HTML5 Canvas tutoriel
- Le secret de la soyeuse JavaScript animation
- Recherche Google "HTML5 Défilement"
- Toile Jeux
- Construire un jeu de tir à défilement vertical avec HTML5 canvas
- Mathématiques mayem
- CAAT framework JavaScript
(La dernière est impressionnant, mais même si presque tout est fait il n'y a rien à propos de défilement).
Voici ce que je suis en train de réfléchir, et je n'ai pas trouvé quelque chose de précieuses à ce sujet. Une idée m'est venu à mon esprit, et je me demande si je dois prendre beaucoup de temps à réfléchir à ce sujet et d'essayer ou pas (c'est pourquoi je pose la question ici, en fait).
Je prévois de faire un jeu avec un défilement "à la" Mario.
Le gros inconvénient à ce sujet, le défilement est que vous avez à redessiner l'ensemble de fond.
J'ai déjà évité deux problèmes de performances du sprite /scroll: créer toile de deux l'un de l'autre:
- l'arrière-plan
- les sprites
Et il suffit d'effacer les sprites.
Le problème est sur le fond: je suis en train de faire une copie complète de l'arrière-plan pour le "visible" de la toile. (note: il n'y a pas de problème de scintillement, car écrit en JavaScript est une opération de blocage et tous les navigateurs modernes poignée verticale synchronisation, donc pas de double mise en mémoire tampon nécessaire).
Voici une ancienne version de ce que j'écris, mais vous obtiendrez de la grande image:
Maintenant, je me demande pour le défilement: ce que si je fais un "arrière-plan div" au lieu d'une toile, avec le CSS appropriée (image de fond pour le fond), et d'écrire les tuiles sur l'image directement, puis modifier les CSS pour simuler la vitesse de défilement? Devrait-il être plus rapide? Si oui, pourquoi? Est-il une bonne idée pour cela?
OriginalL'auteur Olivier Pons | 2013-08-19
Vous devez vous connecter pour publier un commentaire.
Sur un semi-moderne+ ordinateur avec un semi-récent+ navigateur le plus rapide chose à faire est probablement de prendre un super long de la div avec des images d'arrière-plan, réglez le débordement cachés et faites défiler en ajustant scrollLeft ou scrollTop propriétés. C'est BEAUCOUP plus rapide que le réglage des propriétés CSS comme il ne devrait pas déclencher une redistribution de calcul dans le moteur CSS. Fondamentalement, chaque fois que vous touchez une propriété DOM qui pourrait avoir CSS impact, l'ensemble (ou au moins un lot de) de) la structure du document doit être re-vérifié et re-rendus.
Vous pouvez charger dans des morceaux de décors comme ils se la fermer pour éviter un géant massif du chargement de l'image. Je ne crois pas qu'il y est tout à 100% moyen infaillible pour tirer une image de la mémoire dans les navigateurs mais en enlevant les références dans les DOM ou dans votre CSS n'a sans doute pas de mal quand vous avez suffisamment défilée passé un morceau de votre arrière-plan. De cette façon, le navigateur du garbage collector au moins a l'option d'effacement de la mémoire.
Dans la casserole-mobile solutions qui s'appuient sur les webviews (comme Cordova/Phonegap), cependant, bien, c'est pourquoi je suis arrivé à cette question.
Je n'ai aucune idée, mais je suis assez sûr de mélange de HTML et de la toile est une bien mauvaise idée à des fins de performance. Droit maintenant, j'ai pas super compliqué android jeu d'étouffement sur 50x50 100px tuiles dans une toile d'élément dans un android affichage web qui a aussi du HTML de base dans le mélange pour des choses comme les contrôles et la séparation d'un couple d'autres éléments de canevas à partir du repos. J'ai pratiquement un vol d'oiseau-vue navire de croisière autour et faire des scans avec un fromage rayonnant cercle direction artistique qui révèle des éléments sur une carte brouillard de guerre " de style. Fonctionne très bien dans un navigateur. Complète en cas de catastrophe dans le cordova version de l'application.
Je crois que la seule façon que je vais réaliser mon pan-mobile game dev rêves est d'utiliser l'un des nombreux openGL enveloppé dans une toile de l'API de solutions là-bas et complètement abandonner le HTML que je trouve damnés pratique pour la mise en œuvre de l'INTERFACE utilisateur, étant donné que la majeure partie de mon expérience dans le web est l'INTERFACE utilisateur. Une autre astuce pour l'affichage web HTML est d'éviter de se déplacer à l'intérieur des éléments internes si vous le pouvez (il suffit donc de laisser le corps de la poignée de débordement). Le défilement de débordement dans quoi que ce soit, mais le corps n'a même pas travailler dans Android 2 webviews et il semble toujours à cause 4.1 position de starter sur une version antérieure/version simplifiée de l'application que je suis en train de travailler sur.
Si vous êtes à l'appui mobile, je suis tout à fait sympathique. Mais je blâme Android plus de HTML5.
OriginalL'auteur Erik Reppen
Ma conclusion finale: après de nombreuses tentatives, y compris Eirk Reppen suggestion, j'écris directement à "raw" dans les parties cachées de la toile et utiliser les CSS: tous les navigateurs internet, poignée déjà scintillement d'image et tout le reste autour, et ils ont déjà optimisé tout.
De sorte que chaque fois que j'ai essayé, pour "optimiser", les résultats ont été pire.
Il semble que les navigateurs internet sont faites pour gérer correctement les trucs de base faite par beginnners... peut-être parce que 99% du contenu HTML est faite par les débutants.
OriginalL'auteur Olivier Pons
Voici une démo de défilement surdimensionné de la toile en modifiant le CSS de la marge, celui-ci basé sur le défilement avec le temps: https://jsfiddle.net/6othtm0c/
Et cette version avec la souris en faisant glisser: https://jsfiddle.net/ax7n8944/
HTML:
JS pour le défilement avec la version d':
Salut @Calaf, je viens de le tester sur un collègue El Capitan et pas de problèmes soit avec le Violon. Il est en cours d'exécution de la version 46.0 - je ne suis pas sûr pourquoi une version antérieure serait de s'écraser et ne peut pas facilement le tester, mais je pense que votre version n'est n'est plus pris en charge.
OriginalL'auteur pancake
plus rapide de défilement pour faire défiler à l'aide de CSS. Si vous dessinez tous les fond une fois, non seulement la partie visible, mais de tous, et cachez-qui n'est pas visible, et utiliser les css pour le faire défiler (marge, ou la position). Pas de rafraîchissement, seulement CSS changements. Ce travail vraiment plus rapide. Mais si la carte est vraiment énorme, d'autres manières personnalisée peut être mieux.
;)
donc, si la carte est petite, vous predraw tous dans certains cache/div/canvas et utiliser les css pour le déplacer (également masquer les côtés). Si la carte nous énorme, vous pouvez le diviser en certains domaines, et faire de même pour chaque zone, mais vous avez besoin de joindre ces domaines, en quelque sorte. Ou si la carte est en 2d principalement, vous pouvez définir des points clés où vous l'actualisation de cache de la carte par exemple 500m de l'avant et à 500m de retour. Parce que la génération de la carte sur chaque mouvement peut être très lente.
La carte est petite, je suis en train de faire un hack pour infinite scroll, et j'ai trouvé que c'est beaucoup plus lent lorsque j'utilise le CSS que quand je fais un raw copie. Étrange.
N'est-il pas un moyen de flux de données de la carte ?
OriginalL'auteur ViliusL