2012-04-08 16 views
11

Estoy implementando un juego HTML5 utilizando lienzo. Ahora estoy pensando en hacer todas las superposiciones de texto como tooltips, speechbubbles, infowindows, etc. usando elementos HTML con posición absoluta sobre el lienzo. Entonces puedo usar muchos efectos y transiciones en las ofertas de CSS3.Mezcla de lienzo y elementos CSS3

Pero no estoy seguro del rendimiento. Estas superposiciones tienen que agregarse y eliminarse frecuentemente (es algo parecido a MMORPG, por lo que habrá muchas burbujas de discursos, etc.).

Probablemente hay 2 preguntas con respecto al rendimiento:

  1. DOM recorrido para añadir/quitar. Tal vez un caché puede ayudar?

  2. HTML y CSS3 en sí.

La otra opción es administrar estos elementos en el lienzo, dibujándolos en cada cuadro. Pero tal vez tenga otra vez una penalización de rendimiento, debido al código adicional, tiempos de espera y cosas que tendría que agregar, para lograr efectos similares, como en CSS3. Y, de todos modos, se necesitaría atravesar alguna estructura de datos.

¿Algún consejo, opinión, experiencia?

Gracias de antemano.

+3

Los tiempos de cruce DOM se pueden reducir almacenando en el caché los elementos "importantes"; A menudo guardo un hash de someUniqueId => DOMElement para este propósito. La identificación se puede almacenar como un atributo data- * en sus elementos para ayudar con este esquema. En cuanto a mezclar CSS3 con Canvas, me he preguntado sobre esta estrategia yo mismo (+1).La transformación (coordenadas del lienzo -> coordenadas de la pantalla) tendrá que abstraerse bien o terminarás con un lío tratando de descubrir dónde colocar tus elementos regulares en la parte superior del lienzo. –

Respuesta

1

Considere usar solo una de las dos tecnologías mencionadas. Puede ser que pueda lanzar esa aplicación en un dispositivo móvil o tableta. Creo que en estos dispositivos habría problemas con el manejo al mismo tiempo. Y otra cosa: si permaneces en el lienzo, no habrá preocupaciones sobre la compatibilidad. No es una respuesta techy sino que invita a la reflexión.

+0

Sí, estoy de acuerdo en que esto es lo mejor, al menos en lo que respecta a la facilidad de mantenimiento y la portabilidad. – Ixx

0

Una forma de abordar esto es utilizar un mapa de imagen "dinámico" detrás de su objeto de lienzo. Entonces puedes usar el dom según sea necesario. Tenga en cuenta que deberá pasar los clics en el lienzo hasta el mapa de imagen.

1

La mejor razón para usar el DOM para elementos de IU en juegos HTML5 es el manejo de eventos.

Si dibuja todo sobre lienzo, tendrá que escribir su propia lógica para manejar los clics y decidir en qué se ha hecho clic, lo que pronto puede volverse muy complejo, especialmente si tiene varias capas de interfaz.

Con los elementos DOM (especialmente cuando se utiliza una biblioteca como jQuery) esto es trivial, y puede crear una interfaz de usuario rica e interactiva con un mínimo esfuerzo.

El único inconveniente que puedo pensar es que puede encontrar incoherencias en el navegador, especialmente si usa CSS3, pero de nuevo jQuery ayudará con esto.

Supongo que otro inconveniente es que una vez que se baja por la ruta DOM, su juego siempre será un juego de navegador, mientras que si fuera 100% lienzo, siempre existiría la posibilidad de transferir el código a otro idioma y hacerlo nativo, pero supongo que eso sería solo un inconveniente para algunas personas.