2017-10-09 1 views
-2

J'essaye de faire un jeu simple (vue d'en haut) sur la toile. Se il vous plaît dites-moi, ce qui est plus rapide:Comment plusieurs éléments de canevas affectent les performances?

1) Dessinez tout sur un <canvas> et calculer les zones qui doivent être redessinés. 2) Dessinez certaines parties de la scène sur différents éléments <canvas> et ne les mettez à jour que si nécessaire. Dans la variante it, probablement, je peux aussi utiliser un redraw partiel. Par exemple, je pourrais dessiner une carte sur un élément, des ennemis sur le second, et un curseur et etc. sur le troisième. Lorsque je déplaçais des ennemis, je pouvais seulement redessiner la deuxième toile.

Veuillez expliquer avec le plus de détails possible quelle option est la meilleure et pourquoi. Et pourriez-vous s'il vous plaît conseiller des livres qui peuvent approfondir mes connaissances sur cette question? Pour les débutants.

+0

Comme votre question est sans réponse car elle dépendra de ce que le code doit faire. La complexité ne fait que travailler pour le CPU. Restez simple pour la performance. La plupart des jeux utilisent un canevas d'affichage et redessinent cette toile entière à chaque image (1/60sec). La meilleure façon de savoir est de faire, alors ouvrez un IDE et commencez à écrire du code et vous aurez bientôt une réponse à votre question. BTW suivi redessiner les zones est une impasse. – Blindman67

+0

Pourquoi pensez-vous que le suivi des zones de redessiner est une impasse? Je pensais que cela devrait réduire la charge –

+0

Son tout à propos de PPS (pixels par seconde) GPU est rapide, javascript pas. Pour voir ce que je veux dire, créer une toile et obtenir le contexte, puis exécutez 'const test = s => { var n = performance.now(); pour (var i = 0; i <10000; i ++) { ctx.clearRect (0,0, s, s); } console.log (((performance.now() - n)/(s * s)));} test (10); test (300); 'le deuxième appel efface les pixels ~ 10 000 fois plus rapidement. – Blindman67

Répondre

0

La plupart des jeux de toile utiliseront une sorte de superposition que vous décrivez. La couche avant la plus éloignée serait le HUD, soit par un canevas séparé ou des éléments HTML et cela ne changerait que si quelque chose lui arrivait, comme quelqu'un mettant à niveau son joueur. Ensuite, cela dépend de la façon dont ils dessinent la toile. Le plus simple serait de simplement dessiner les parties de la carte et les obstacles sont à l'écran.

+0

Vous vous rendez compte que la superposition d'une toile sur une autre nécessite encore la composition une fois une image, si écrire des pixels à n'importe quel calque pendant cette image. Qu'il est en fait plus lent que le DOM gère (mal) le compositing que de le faire (bien) via drawImage en javascript, parce que de cette façon vous pouvez prendre quelques raccourcis dont le DOM ne sera pas conscient. – Blindman67

+0

Eh bien le but est de ne pas redessiner aussi souvent que la toile de jeu, seulement sur Change. –

+0

Si vous modifiez un seul pixel sur l'une des couches, toutes les couches doivent être composées. Avec un arrière-plan et une toile en couches au premier plan. Vous devrez effacer le premier plan pour dessiner dessus. Lorsque vous quittez, le DOM va recompiler les toiles d'arrière-plan et d'avant-plan. Mais si vous gardez l'arrière-plan hors de l'écran et que vous l'utilisez pour effacer 'ctx.drawImage (bgCanvas, 0,0)' plutôt que d'utiliser 'ctx.clearRect', vous économisez l'équivalent d'un écran entier en écriture de pixels. Les toiles en couches ne se composent pas par magie, elles nécessitent le GPU comme un appel drawImage. Quoi de plus lent que JS ?? le DOM – Blindman67