cocos2d-x: Desactivar antialising en texturas, atlas y fuentes

El antialising de texturas es una técnica que permite suavizar las imágenes cuando estas se muestran con alguna transformación (escalado, rotación, etc.) respecto a la original.

Por defecto, cocos2d-x aplica esta técnica a las texturas que carguemos en nuestro juego, pero hay ocasiones en las que nos interesa deshabilitar esta técnica. Por ejemplo, en videojuegos con estética pixelada.

La forma de desactivar el anti alias es llamar al método setAliasTexParameters() en las texturas utilizadas. Desconozco si existe algún método sencillo para desactivar el suavizado de forma global, por lo que yo llamo al método setAliasTexParameters() en cada una de las texturas usadas para construir los sprites del juego. A continuación se muestran ejemplos de cómo hacerlo para diferentes elementos.

 

Sprite

auto sprite = Sprite::create("image.png");
sprite->getTexture()->setAliasTexParameters();

 

Sprite Atlas

Para los atlas de texturas (creado con archivos .plist) tenemos varias opciones para acceder a las texturas. Por ejemplo:

Acceder a la textura a través de un sprite

Al establecer los parámetros en una textura de un sprite atlas, esto afecta automáticamente a todos los sprites que utilicen la misma textura, por lo que sólo seria necesario hacerlo una vez para todo el atlas:

auto sprite = Sprite::createWithSpriteFrameName("sprite_name");
sprite->getTexture()->setAliasTexParameters();

Crear el atlas con una textura configurada

Con el siguiente método se carga una textura sin suavizado.

Texture2D* loadAliasTexture(const std::string &textureFile) {
    auto img = new Image();
    img->initWithImageFile(textureFile);
 
    auto tex = new Texture2D();
    tex->initWithImage(img);
    tex->setAliasTexParameters();
    return tex;
}

A continuación se puede cargar el atlas usando la textura sin suavizar.

Texture2D* tex = loadAliasTexture("images.png");
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("imgages.plist", tex);

 

Fuentes Bitmap

auto label = Label::createWithBMFont("font.fnt", "Label text");
label->getFontAtlas()->getTexture(0)->setAliasTexParameters();

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*