mozillahispano / blog-labs

Seguimiento de las tareas del blog de Labs
3 stars 4 forks source link

Web Font preloading for HTML5 games #82

Closed jvillalobos closed 8 years ago

jvillalobos commented 8 years ago

https://hacks.mozilla.org/2016/06/webfont-preloading-for-html5-games/

SoftwareRVG commented 8 years ago

Jorge. ¿ Me puedes asignar este ?

Saludos. Rober Villar

SoftwareRVG commented 8 years ago

Precarga de Fuentes Web para los juegos HTML5

En el desarrollo de juegos hay dos métodos de reproducción de texto: A traves de bitmap fonts y de vector fonts. Bitmap fonts son esencialmente una imagen en sprite sheet que contiene todos los caracteres de una fuente dada. El sprite sheet utiliza un archivo de fuente normal (tradicionalmente .ttf). ¿Como se aplica al desarrollo de juegos en la Web y juegos HTML5?

Puedes utilizar bitmap fonts como de costumbre – son simplemente imágenes, despues de todo, y la mayoría de los motores de juego HTML 5 o librerías los soportan correctamente. Para reproducir vector font , podemos confiar en cualquier fuente que sea accesible via CSS: Esto incluye tanto las fuentes del sistema ya presentes en el ordenador del jugador (como Arial o Times New Roman), como las Fuentes Web, que se pueden descargar sobre la marcha, si no están ya presentes en el sistema.

Sin embargo , no todos los motores de juego o frameworks incluyen mecanismos para cargar esas fuentes como activos regulares –como imágenes o archivos de audio – y confían en que ellos estén ya presentes. Esto puede conducir a peculiaridades en las que el juego intenta reproducir un texto con una fuente que no está cargada todavía… En cambio, el jugador no obtendrá ningun texto, o texto reproducido con una fuente alternativa por defecto.

En este artículo vamos a explorar algunas técnicas para precargar Fuentes Web en nuestros juegos, y descubrir como integrarlas con un popular framework de juego 2D: Phaser.

Como funciona la carga de Fuentes Web

Hay dos maneras de cargar una Fuente Web: A traves de CSS (utilizando @font-face) o a través de JavaScript (utilizando Font Loading API). La solución CSS ha estado disponible desde hace algún tiempo; mientras que la JavaScript API no se ha adoptado ampliamente por los navegadores todavía. Si quieres lanzar un juego en estos días, recomendamos el método CSS por su portabilidad.

Declaración con @font-face

Esto es simplemente una declaración en tu código CSS que te permite instalar una familia de fuentes y apunta a los lugares en los que se pueden recuperar. En este fragmento se declara una familia de fuentes llamada Amatica SC, y asume que tenemos un archivo TTF como un activo.

@font-face {
  font-family: 'Amatica SC';
  font-style: normal;
  font-weight: 400;
  src: local('Amatica SC'),
       local('AmaticaSC-Regular'),
       url(fonts/amaticasc-regular.ttf) format('truetype');
}

Nota: además de señalar a archivos específicos, también podemos apuntar a nombres de fuentes que pueden estar instaladas en el ordenador del usuario (en este caso, Amatica SC o Amatica SC-Regular).

Carga actual

Es importante recordar que la declaración de una familia de fuentes via CSS no carga la fuente! la fuente es cargada unicamente cuando el navegador detecta por primera vez que va a ser utilizada.

Esto puede causar un fallo visual: O bién el texto se muestra con una fuente por defecto y después cambia a la Fuente Web (esto es conocido como FOUT o Flash De Texto Sin Estilo); o el texto no se representa en absoluto y permanece invisible hasta que la fuente está disponible. En sitios Web esto no suele ser un gran problema, pero en juegos (Canvas/WebGL) no conseguimos que el navegador automaticamente lo vuelva a reproducir cuando la fuente está disponible! Por lo que si intentamos reproducir el texto y la fuente no está disponible, este es un gran problema.

Así que en realidad tenemos que descargar la fuente antes de intentar utilizarla en nuestro juego ...

SoftwareRVG commented 8 years ago

Precarga de Fuentes Web para los juegos HTML5

En el desarrollo de juegos hay dos métodos de reproducción de texto: A traves de bitmap fonts y de vector fonts. Bitmap fonts son esencialmente una imagen en sprite sheet que contiene todos los caracteres de una fuente dada. El sprite sheet utiliza un archivo de fuente normal (tradicionalmente .ttf). ¿Como se aplica al desarrollo de juegos en la Web y juegos HTML5?

Puedes utilizar bitmap fonts como de costumbre – son simplemente imágenes, despues de todo, y la mayoría de los motores de juego HTML 5 o librerías los soportan correctamente. Para reproducir vector font , podemos confiar en cualquier fuente que sea accesible via CSS: Esto incluye tanto las fuentes del sistema ya presentes en el ordenador del jugador (como Arial o Times New Roman), como las Fuentes Web, que se pueden descargar sobre la marcha, si no están ya presentes en el sistema.

Sin embargo , no todos los motores de juego o frameworks incluyen mecanismos para cargar esas fuentes como activos regulares –como imágenes o archivos de audio – y confían en que ellos estén ya presentes. Esto puede conducir a peculiaridades en las que el juego intenta reproducir un texto con una fuente que no está cargada todavía… En cambio, el jugador no obtendrá ningun texto, o texto reproducido con una fuente alternativa por defecto.

En este artículo vamos a explorar algunas técnicas para precargar Fuentes Web en nuestros juegos, y descubrir como integrarlas con un popular framework de juego 2D: Phaser.

Como funciona la carga de Fuentes Web

Hay dos maneras de cargar una Fuente Web: A traves de CSS (utilizando @font-face) o a través de JavaScript (utilizando Font Loading API). La solución CSS ha estado disponible desde hace algún tiempo; mientras que la JavaScript API no se ha adoptado ampliamente por los navegadores todavía. Si quieres lanzar un juego en estos días, recomendamos el método CSS por su portabilidad.

Declaración con @font-face

Esto es simplemente una declaración en tu código CSS que te permite instalar una familia de fuentes y apunta a los lugares en los que se pueden recuperar. En este fragmento se declara una familia de fuentes llamada Amatica SC, y asume que tenemos un archivo TTF como un activo.

@font-face {
  font-family: 'Amatica SC';
  font-style: normal;
  font-weight: 400;
  src: local('Amatica SC'),
       local('AmaticaSC-Regular'),
       url(fonts/amaticasc-regular.ttf) format('truetype');
}

Nota: además de señalar a archivos específicos, también podemos apuntar a nombres de fuentes que pueden estar instaladas en el ordenador del usuario (en este caso, Amatica SC o Amatica SC-Regular).

Carga actual

Es importante recordar que la declaración de una familia de fuentes via CSS no carga la fuente! la fuente es cargada unicamente cuando el navegador detecta por primera vez que va a ser utilizada.

Esto puede causar un fallo visual: O bién el texto se muestra con una fuente por defecto y después cambia a la Fuente Web (esto es conocido como FOUT o Flash De Texto Sin Estilo); o el texto no se representa en absoluto y permanece invisible hasta que la fuente está disponible. En sitios Web esto no suele ser un gran problema, pero en juegos (Canvas/WebGL) no conseguimos que el navegador automaticamente lo vuelva a reproducir cuando la fuente está disponible! Por lo que si intentamos reproducir el texto y la fuente no está disponible, este es un gran problema.

Así que en realidad tenemos que descargar la fuente antes de intentar utilizarla en nuestro juego ...

Cómo forzar la descarga de Fuentes Web

La API de carga de fuentes CSS

La JavaScript API fuerza la carga de una fuente. A partir de ahora, esto solo funciona en Firefox, Chrome, y Opera (puedes comprobar para la mayoría de las actualizaciones de carga de fuentes el soporte de información en caniuse.com).

Ten en cuenta que cuando se utiliza FontFaceSet, todavía tienes que declarar tus fuentes en algún lugar – en este caso con, @font-face en el CSS.

Typekit’s Web Font Loader

Este es un cargador de código abierto desarrollado por TypeKit y Google – Puedes sacarlo de el repositorio Loader Web Font en Github. Este puede cargar sus propias fuentes alojadas, como también fuentes de repositorios populares como Typekit, Google Fonts, etc.

En el siguiente fragmento cargaremos Amatica SC directamente de Google Fonts y especificaremos una función de devolución de llamada – para representar texto en un canvas 2D – que será invocado cuando las fuentes estén cargadas y listas para su uso:

FontFace Observer library

FontFace Observer es otro cargador de código abierto que no contiene código para repositorios de fuentes comunes. Si tienes tus propias fuentes alojadas, esto podría ser una opción mejor que Typekit’s puesto que es un tamaño de archivo más ligero.

Esta librería utiliza una interfaz Promesa – pero no te preocupes, hay una versión con un polyfill si necesitas el soporte para viejos navegadores. Aquí de nuevo, también necesitas declarar tus fuentes via CSS, para que la librería sepa donde ir a recuperarlas:

Integrando el Cargador de Fuentes en Phaser

Ahora que hemos visto como cargar Fuentes web en HTML5, vamos a hablar sobre como integrar estas fuentes con un motor de juego. El proceso será diferente de un motor o un framework a otro. He tomado Phaser como ejemplo, puesto que está muy extendida su utilización para el desarrollo de juegos 2D. Puedes echar un vistazo a algunos ejemplos online aquí:

Y, por supuesto , está el repositorio Github con el código fuente completo, donde puedes mirar detenidamente lo que he construido.

Así funciona Phaser : El juego está dividido en estados del juego, cada uno de los cuales ejecuta una secuencia de fases. Las fases más importantes son inicio, precarga, creación, reproducción, y actualización. La fase de precarga es donde debemos cargar los activos del juego como imágenes , sonidos , etc. Pero desafortunadamente ,el cargador de Phaser no proporciona un método para la precarga de fuentes.

Hay varias maneras de evitar o solucionar este problema:

Retrasar la representación de la fuente

Podemos utilizar Font Loading API o una librería para forzar una descarga de la fuente en la fase de precarga. Sin embargo, esto crea un problema. El cargador de Phaser no nos permite indicar cuando toda la carga ha finalizado. Esto significa que no podemos pausar la carga y evitar la fase de precarga desde que finalizamos hasta que podemos cambiar a crear – aquí es donde nos gustaría establecer nuestro mundo del juego.

Un primer enfoque sería retrasar la representación del texto hasta que se carga la fuente . Después de todo, tenemos una devolución de la llamada disponible en promesa, ¿No es cierto?

function preload() {
  // load other assets here
  // ...
  let font = new FontFaceObserver('Amatica SC');
  font.load().then(function () {
    game.add.text(0, 0, 'Lorem ipsum', {
      font: '12px Amatica SC',
      fill: '#fff'
    });
  }
}

Hay un problema con este enfoque: ¿Que ocurre si la devolución de la llamada es invocada antes de que la fase de precarga haya finalizado? Nuestro objeto Phaser.Text sería eliminado en el momento que cambiamos a crear.

Lo que podemos hacer es guardar la creación del texto bajo dos banderas: Una que indique que la fuente ha sido cargada, y una segunda que indique que la fase de creación ha comenzado:

var fontLoaded = false;
var gameCreated = false;
function createText() {
  if (!fontLoaded || !gameCreated) return;
  game.add.text(0, 0, 'Lorem ipsum', {
      font: '12px Amatica SC',
      fill: '#fff'
  });
}
function preload() {
  let font = new FontFaceObserver('Amatica SC');
  font.load().then(function () {
    fontLoaded = true;
    createText();
  });
}
function create() {
  gameCreated = true;
  createText();
}

La principal desventaja de este método es que ignoramos por completo el cargador de Phaser. Dado que este no pone las fuentes en la cola como un activo, el juego comenzará y las fuentes no estarán allí , esto probablemente causará un fallo o efecto de parpadeo. Otro problema es que en la “Carga” la pantalla o barra ignorarán las fuentes, se visualizará como si el 100% hubiera sido cargado, y cambiará a juego incluso aunque nuestros activos de fuentes todavía no hayan sido cargados.

SoftwareRVG commented 8 years ago

Precarga de Fuentes Web para los juegos HTML5

En el desarrollo de juegos hay dos métodos de reproducción de texto: A traves de bitmap fonts y de vector fonts. Bitmap fonts son esencialmente una imagen en sprite sheet que contiene todos los caracteres de una fuente dada. El sprite sheet utiliza un archivo de fuente normal (tradicionalmente .ttf). ¿Como se aplica al desarrollo de juegos en la Web y juegos HTML5?

Puedes utilizar bitmap fonts como de costumbre – son simplemente imágenes, despues de todo, y la mayoría de los motores de juego HTML 5 o librerías los soportan correctamente. Para reproducir vector font , podemos confiar en cualquier fuente que sea accesible via CSS: Esto incluye tanto las fuentes del sistema ya presentes en el ordenador del jugador (como Arial o Times New Roman), como las Fuentes Web, que se pueden descargar sobre la marcha, si no están ya presentes en el sistema.

Sin embargo , no todos los motores de juego o frameworks incluyen mecanismos para cargar esas fuentes como activos regulares –como imágenes o archivos de audio – y confían en que ellos estén ya presentes. Esto puede conducir a peculiaridades en las que el juego intenta reproducir un texto con una fuente que no está cargada todavía… En cambio, el jugador no obtendrá ningun texto, o texto reproducido con una fuente alternativa por defecto.

En este artículo vamos a explorar algunas técnicas para precargar Fuentes Web en nuestros juegos, y descubrir como integrarlas con un popular framework de juego 2D: Phaser.

Como funciona la carga de Fuentes Web

Hay dos maneras de cargar una Fuente Web: A traves de CSS (utilizando @font-face) o a través de JavaScript (utilizando Font Loading API). La solución CSS ha estado disponible desde hace algún tiempo; mientras que la JavaScript API no se ha adoptado ampliamente por los navegadores todavía. Si quieres lanzar un juego en estos días, recomendamos el método CSS por su portabilidad.

Declaración con @font-face

Esto es simplemente una declaración en tu código CSS que te permite instalar una familia de fuentes y apunta a los lugares en los que se pueden recuperar. En este fragmento se declara una familia de fuentes llamada Amatica SC, y asume que tenemos un archivo TTF como un activo.

@font-face {
  font-family: 'Amatica SC';
  font-style: normal;
  font-weight: 400;
  src: local('Amatica SC'),
       local('AmaticaSC-Regular'),
       url(fonts/amaticasc-regular.ttf) format('truetype');
}

Nota: además de señalar a archivos específicos, también podemos apuntar a nombres de fuentes que pueden estar instaladas en el ordenador del usuario (en este caso, Amatica SC o Amatica SC-Regular).

Carga actual

Es importante recordar que la declaración de una familia de fuentes via CSS no carga la fuente! la fuente es cargada unicamente cuando el navegador detecta por primera vez que va a ser utilizada.

Esto puede causar un fallo visual: O bién el texto se muestra con una fuente por defecto y después cambia a la Fuente Web (esto es conocido como FOUT o Flash De Texto Sin Estilo); o el texto no se representa en absoluto y permanece invisible hasta que la fuente está disponible. En sitios Web esto no suele ser un gran problema, pero en juegos (Canvas/WebGL) no conseguimos que el navegador automaticamente lo vuelva a reproducir cuando la fuente está disponible! Por lo que si intentamos reproducir el texto y la fuente no está disponible, este es un gran problema.

Así que en realidad tenemos que descargar la fuente antes de intentar utilizarla en nuestro juego ...

Cómo forzar la descarga de Fuentes Web

La API de carga de fuentes CSS

La JavaScript API fuerza la carga de una fuente. A partir de ahora, esto solo funciona en Firefox, Chrome, y Opera (puedes comprobar para la mayoría de las actualizaciones de carga de fuentes el soporte de información en caniuse.com).

Ten en cuenta que cuando se utiliza FontFaceSet, todavía tienes que declarar tus fuentes en algún lugar – en este caso con, @font-face en el CSS.

Typekit’s Web Font Loader

Este es un cargador de código abierto desarrollado por TypeKit y Google – Puedes sacarlo de el repositorio Loader Web Font en Github. Este puede cargar sus propias fuentes alojadas, como también fuentes de repositorios populares como Typekit, Google Fonts, etc.

En el siguiente fragmento cargaremos Amatica SC directamente de Google Fonts y especificaremos una función de devolución de llamada – para representar texto en un canvas 2D – que será invocado cuando las fuentes estén cargadas y listas para su uso:

FontFace Observer library

FontFace Observer es otro cargador de código abierto que no contiene código para repositorios de fuentes comunes. Si tienes tus propias fuentes alojadas, esto podría ser una opción mejor que Typekit’s puesto que es un tamaño de archivo más ligero.

Esta librería utiliza una interfaz Promesa – pero no te preocupes, hay una versión con un polyfill si necesitas el soporte para viejos navegadores. Aquí de nuevo, también necesitas declarar tus fuentes via CSS, para que la librería sepa donde ir a recuperarlas:

Integrando el Cargador de Fuentes en Phaser

Ahora que hemos visto como cargar Fuentes web en HTML5, vamos a hablar sobre como integrar estas fuentes con un motor de juego. El proceso será diferente de un motor o un framework a otro. He tomado Phaser como ejemplo, puesto que está muy extendida su utilización para el desarrollo de juegos 2D. Puedes echar un vistazo a algunos ejemplos online aquí:

Y, por supuesto , está el repositorio Github con el código fuente completo, donde puedes mirar detenidamente lo que he construido.

Así funciona Phaser : El juego está dividido en estados del juego, cada uno de los cuales ejecuta una secuencia de fases. Las fases más importantes son inicio, precarga, creación, reproducción, y actualización. La fase de precarga es donde debemos cargar los activos del juego como imágenes , sonidos , etc. Pero desafortunadamente ,el cargador de Phaser no proporciona un método para la precarga de fuentes.

Hay varias maneras de evitar o solucionar este problema:

Retrasar la representación de la fuente

Podemos utilizar Font Loading API o una librería para forzar una descarga de la fuente en la fase de precarga. Sin embargo, esto crea un problema. El cargador de Phaser no nos permite indicar cuando toda la carga ha finalizado. Esto significa que no podemos pausar la carga y evitar la fase de precarga desde que finalizamos hasta que podemos cambiar a crear – aquí es donde nos gustaría establecer nuestro mundo del juego.

Un primer enfoque sería retrasar la representación del texto hasta que se carga la fuente . Después de todo, tenemos una devolución de la llamada disponible en promesa, ¿No es cierto?

function preload() {
  // load other assets here
  // ...
  let font = new FontFaceObserver('Amatica SC');
  font.load().then(function () {
    game.add.text(0, 0, 'Lorem ipsum', {
      font: '12px Amatica SC',
      fill: '#fff'
    });
  }
}

Hay un problema con este enfoque: ¿Que ocurre si la devolución de la llamada es invocada antes de que la fase de precarga haya finalizado? Nuestro objeto Phaser.Text sería eliminado en el momento que cambiamos a crear.

Lo que podemos hacer es guardar la creación del texto bajo dos banderas: Una que indique que la fuente ha sido cargada, y una segunda que indique que la fase de creación ha comenzado:

var fontLoaded = false;
var gameCreated = false;
function createText() {
  if (!fontLoaded || !gameCreated) return;
  game.add.text(0, 0, 'Lorem ipsum', {
      font: '12px Amatica SC',
      fill: '#fff'
  });
}
function preload() {
  let font = new FontFaceObserver('Amatica SC');
  font.load().then(function () {
    fontLoaded = true;
    createText();
  });
}
function create() {
  gameCreated = true;
  createText();
}

La principal desventaja de este método es que ignoramos por completo el cargador de Phaser. Dado que este no pone las fuentes en la cola como un activo, el juego comenzará y las fuentes no estarán allí , esto probablemente causará un fallo o efecto de parpadeo. Otro problema es que en la “Carga” la pantalla o barra ignorarán las fuentes, se visualizará como si el 100% hubiera sido cargado, y cambiará a juego incluso aunque nuestros activos de fuentes todavía no hayan sido cargados.

Utilizando un cargador personalizado

¿Y si pudieramos modificar el cargador de Phaser añadiendole lo que queramos? ¡Podemos! Podemos extender el cargador de Phaser y añadir un método al prototipo que enlistará un activo – ¡ Una Fuente Web !. El problema es que necesitamos modificar un método interno ( destinando a uso privado) en el cargador de phaser, loadFile, entonces podemos decir al cargador de Phaser como cargar la fuente , y cuando la carga ha finalizado.

// creamos nuestra propia clase de cargador personalizado extendiendo el Cargador de Phaser.
// este nuevo cargador soportará fuentes Web
function CustomLoader(game) {
    Phaser.Loader.call(this, game);
}
CustomLoader.prototype = Object.create(Phaser.Loader.prototype);
CustomLoader.prototype.constructor = CustomLoader;
// nuevo método para cargar fuentes Web
// este sigue la estructura de todos los archivos de métodos de carga de activos
CustomLoader.prototype.webfont = function (key, fontName, overwrite) {
    if (typeof overwrite === 'undefined') { overwrite = false; }
    // aquí el nombre de la fuente será almacenado en archivo con propiedades `url` 
    // después es añadido  a la lista  de activos
    this.addToFileList('webfont', key, fontName);
    return this;
};
CustomLoader.prototype.loadFile = function (file) {
    Phaser.Loader.prototype.loadFile.call(this, file);
    // necesitamos llamar asyncComplete una vez que el archivo ha sido cargado
    if (file.type === 'webfont') {
        var _this = this;des
        // nota: file.url contiene el nombre de la fuente
        var font = new FontFaceObserver(file.url);
        font.load(null, 10000).then(function () {
            _this.asyncComplete(file);
        }, function ()  {
            _this.asyncComplete(file, 'Error loading font ' + file.url);
        });
    }
};

Una vez que el código está en su lugar, necesitamos crear una instancia de ella y de intercambio en game.load. Este intercambio debe tener lugar tan pronto como sea posible: En la fase de inicio del primer estado del juego ejecutado.


function init() {
    // swap Phaser.Loader for our custom one
    game.load = new CustomLoader(game);
}
function preload() {
    // now we can load our font like a normal asset
    game.load.webfont('fancy', 'Amatica SC');
}

La ventaja de este método es la integración real con el cargador, por lo que si tenemos una barra de carga ,esta no finalizará hasta que la fuente haya sido totalmente descargada (o tiempo de espera). La desventaja, por supuesto, es que estamos modificando un método interno de Phaser, así que no tenemos garantía de que nuestro código seguira funcionando en futuras versiones del framework.

Una solución tonta…

Un método que he utilizado en atascos de juego es no comenzar el juego del todo hasta saber que la fuente está preparada. Dado que la mayoría de los navegadores no representan un texto hasta que la Fuente Web ha sido cargada, acabo de crear una pantalla con un Botón de Reproducción que utiliza las Fuentes Web… De este modo, se que el botón será visible una vez que se haya cargado la fuente, por lo que es seguro comenzar el juego a continuación.

La desventaja obvia es que no comenzamos a cargar activos hasta que el jugador pulsa este botón … Pero funciona y es muy fácil de implementar. Aquí hay una captura de pantalla de ejemplo de una de esas pantallas de presentación , creada con elementos regulares HTML5 DOM y animaciones CSS:

Screen Shot 2016-06-28 at 15.23.24


Y aquí lo tienes, ¡ Representación de Fuentes Web en juegos HTML5 ! En el futuro, una vez que la Font Loading API esté más desarrollada, motores de juego HTML5 y frameworks comenzarán a integrarla en su código,y esperemos que no tengamos que hacer esto nosotros mismos o buscar una solución útil.

Hasta entonces, ¡ Feliz codificación !

Acerca de Belén Albeza

Belén es una ingeniera y desarrolladora de juegos que trabaja en relación con los desarrolladores Mozilla . Ella se preocupa por los estándares Web, código de alta calidad, accesibilidad y desarrollo del juego.

```

Más artículos de Belén Albeza…

```

Un comentario

```
    ```
  1. CreativeSpark ```

    Buena solución – Espero que esto sea implantado en el cargador por defecto Phaser en una futura actualización.

    11 Julio , 2016 a las 14:07

    Responder

    ```

Publica tu comentario

``` ```
``` ```
SoftwareRVG commented 8 years ago

Jorge, te envio enlace Google Docks con la traducción del artículo terminada. Disculpa por el retraso, he estado desarrollando código con animaciones CSS, SVG, javascript, diseñando animaciones en Blender, y alguna colaboración en MDN ¡ He estado muy ocupado !. Dejo un enlace tambien para la edición en el waffle, por si no pudieras encargarte personalmente.

Saludos. Rober Villar SoftwareRVG on GitHub

Enlace edición: https://docs.google.com/document/d/14cFxb4ieb3RnxQoN2SZczr1NlIYY1ZZtYCtCbHWhzA4/edit?usp=sharing


fireshot screen capture 158 - web font preloading for html5 games mozilla hacks the web developer blog - _c__users_robervillargarcia_desktop_mo

jvillalobos commented 8 years ago

Publicado: https://www.mozilla-hispano.org/precarga-de-web-fonts-para-juegos-html5/

Gracias!

SoftwareRVG commented 8 years ago

No entiendo porque has puesto este artículo en tu blog , cuando lo he traducido yo. Y ya tengo mi propia sección.

El 11 de septiembre de 2016 a las 21:26 Jorge Villalobos notifications@github.com escribió:

Publicado: https://www.mozilla-hispano.org/precarga-de-web-fonts-para-juegos-html5/

Gracias!

—
You are receiving this because you were assigned.
Reply to this email directly, view it on GitHub https://github.com/mozillahispano/blog-labs/issues/82#issuecomment-246199027 , or mute the thread https://github.com/notifications/unsubscribe-auth/APBJ2eEe32WD7pi3QMhmlNdZ9RS3jPRxks5qpFX2gaJpZM4JIqMG .
SoftwareRVG commented 8 years ago

Mira Jorge. he traducido para este blog unos nueve o diez artículos, con las demos y , me parece que estaban bastante bien todos, quizá alguna pequeña corrección has podido hacer. Ahora acabo de recibir un e-mail. Y en uno de los últimos articulos que he traducido.( https://www.mozilla-hispano.org/precarga-de-web-fonts-para-juegos-html5/ ) lo has puesto en tu blog. Solo me has puesto uno firmado por mi en mi blog. de los 9 ó 10 que he traducido.

No hay ningun problema. Lo hago para mejorar mi nivel de inglés. pero si lo gestionas así , cogere otros artículos en MDN, donde los traduzco , edito y publico yo mismo , y como consecuencia sale mi colaboración firmada. Publico demos de CSS. Videos...etc. y claramente puedo publicar que el desarrollo o montaje de video, también las traducciones, las he realizado yo. Y salen publicadas en mi perfil de MDN.No salen en el perfil de Dave Camp o en el de Dan Callahan , o en el de Jeremie Patonnier ni ningun otro desarrollador.

El trabajo que yo realizo....desarrollo, edición de video , animaciones , traducciones. Sale todo en mi perfil de MDN firmado por Rober Villar ó SoftwareRVG, como es natural. Sin embargo en el Blog de Labs. Lo que estais haciendo no me parece muy ético. ¿ Que te parecería Jorge que cuando hubieras desarrollado un complemeto...,lo publicaran en el blog de complementos de mozilla add ons firmado por Dan callahan ? ... Eso es lo que me haciendo a mi.... ¡¡¡ Piensalo !!!

El 11 de septiembre de 2016 a las 21:26 Jorge Villalobos notifications@github.com escribió:

Publicado: https://www.mozilla-hispano.org/precarga-de-web-fonts-para-juegos-html5/

Gracias!

—
You are receiving this because you were assigned.
Reply to this email directly, view it on GitHub https://github.com/mozillahispano/blog-labs/issues/82#issuecomment-246199027 , or mute the thread https://github.com/notifications/unsubscribe-auth/APBJ2eEe32WD7pi3QMhmlNdZ9RS3jPRxks5qpFX2gaJpZM4JIqMG .
jvillalobos commented 8 years ago

Primero que nada, todos las traducciones tienen atribución, incluyendo las que salen bajo mi nombre. La primera línea de todos los posts dice quién fue el traductor, a menos que de verdad haya sido yo (lo cual es bastante inusual).

La razón por la que salió bajo mi nombre es que se me olvidó que ud ya tiene cuenta en el blog. No sé si Guillermo le explicó, pero ahora ud puede crear el borrador del artículo, para que yo pueda revisarlo y publicarlo ahí, en vez de usar Google Docs. Así es más fácil para mí tomar el artículo y publicarlo bajo la cuenta correcta. A futuro le agradecería que haga eso, y así nos ahorramos los malentendidos.

SoftwareRVG commented 8 years ago

De acuerdo Jorge, ya me he dado cuenta de que has subsanado el error.

Te los estoy pasando en google -Docks , porque en un principio te lo pasaba por el canal más común entre desarrolladores Git Hub. Y me dijisteis que en Google Docks.

En mi blog no he visto ningun portal privado para publicar borradores. Si quieres que los siguientes te los pase por allí ,ya me diras como acceder. Bueno Jorge eso es lo de menos ya habras visto que en Git Hub os paso el código original mozilla traducido. Ya me diras.

No se si te había dicho que desarrollo animaciones CSS ,javascript , SVG y también edición de video en FHD y 2K en expression encoder con animaciones de blender que desarrollo. Si quieres que haga alguna colaboración en esa linea con mozilla hispano , me lo dices. Te dejo 2 enlaces de dos publicaciones que presenté hace poco en Mozilla MDN , a ver si te gustan.

Saludos Jorge , y a todos los compañeros del Blog de Labs.

Pagina donde estan las publicaciones: Mozilla MDN Demos of open web technologies https://developer.mozilla.org/en-US/docs/Web/Demos_of_open_web_technologies

Mis publicaciones son las 2 primeras de la sección de CSS . Y las dos primeras de la sección video. (nota: estos videos los edité renderizando en blender y solo están en HD 720 y FHD 1080. Asegurate que en vimeo le ajustas la calidad más alta. si no lo haces así pierden vistosidad.) Actualmente los paso por encoder consiguiendo resoluciones de 1440 px y 2k. ¡ Se ven de cine !.

El logotipo de mozilla , que te voy a decir. Tu también eres desarrollador,... Es un floating logo en css puro, con la fuente de mozilla "metabold",en blanco y sombras en blanco ahumado y las sombras y textura que le he dado detrás en naranja que combina bien con el background del logotipo mozilla que le he aplicado.

El 12 de septiembre de 2016 a las 16:53 Jorge Villalobos notifications@github.com escribió:

Primero que nada, todos las traducciones tienen atribución, incluyendo las que salen bajo mi nombre. La primera línea de todos los posts dice quién fue el traductor, a menos que de verdad haya sido yo (lo cual es bastante inusual).

La razón por la que salió bajo mi nombre es que se me olvidó que ud ya tiene cuenta en el blog. No sé si Guillermo le explicó, pero ahora ud puede crear el borrador del artículo, para que yo pueda revisarlo y publicarlo ahí, en vez de usar Google Docs. Así es más fácil para mí tomar el artículo y publicarlo bajo la cuenta correcta. A futuro le agradecería que haga eso, y así nos ahorramos los malentendidos.

—
You are receiving this because you were assigned.
Reply to this email directly, view it on GitHub https://github.com/mozillahispano/blog-labs/issues/82#issuecomment-246373671 , or mute the thread https://github.com/notifications/unsubscribe-auth/APBJ2WIZYSnxENwTsWbhBOyC2GtI8Fb9ks5qpWdpgaJpZM4JIqMG .