ruta de aprendizaje cocos2d-x 4.0 (ocho) varias formas de crear sprites

Los elfos son la clase más común y más utilizada en cocos2dx. Hablemos de eso hoy.

El sprite es primero una imagen bidimensional, pero podemos cambiar sus propiedades (incluida la rotación, posición, escala, color, etc.), y también podemos animarlo.

Puedes pensar en los elfos como monstruos en el juego, el protagonista o todo lo que se puede mover.

Varias formas de crear sprites

Método 1: Cree directamente con crear más imágenes.

Hemos estado en contacto muchas veces antes.

auto sprite = Sprite::create("HelloWorld.png");

Sin embargo, crear tiene más funciones, por ejemplo, solo quiero mostrar los ojos del sprite (interceptar parte de la imagen), luego agregar el parámetro Rect () a la función de creación:

auto sprite = Sprite::create("HelloWorld.png", Rect(30, 120, 130, 50));

Los 4 parámetros de Rect (x, y, ancho, alto):

x, y: coordenadas relativas a la esquina superior izquierda de la imagen, especificando (0, 0) es la esquina superior izquierda de la imagen.

ancho, alto: es el ancho y alto. Entonces, ¿qué es esta unidad? El tamaño de ventana utilizado en mi ejemplo anterior es 480, 320. Si lo cambia a 1024, 768, intente con los 4 parámetros anteriores. Este es el resultado: la imagen está desordenada.

Por qué La razón es que el tamaño de la imagen es diferente bajo diferentes resoluciones.

Hagamos un experimento: no especificamos Rect, imprimimos el tamaño de la imagen a 480, 320 y 1024, resolución de 768 respectivamente.

auto sprite = Sprite::create("HelloWorld.png");
auto size = sprite->getContentSize();
log("sprite size: width = %f, height = %f", size.width, size.height);

El resultado es:

480,320:sprite size: width = 195.000000, height = 270.000000
1024,768:sprite size: width = 91.406242, height = 126.562492

Se puede concluir que cuanto mayor sea la resolución, menor será el tamaño de la imagen en el programa. Los valores de los cuatro parámetros de Rect () se verán afectados por esto.

Luego, para la solución, calcule la proporción de la tasa de licitación o simplemente use Rect () y capture directamente la imagen.

Parece que crear un sprite es muy simple, pero la lógica interna es bastante complicada.

Método 2: crear con textura (Texture2D)

El efecto es el mismo que cuando se usa crear.

Definición de funciones:

Sprite* Sprite::createWithTexture(Texture2D *texture);
Sprite* Sprite::createWithTexture(Texture2D *texture, const Rect& rect, bool rotated);

Cuando se le llama, puede definir directamente una instancia de Texture2D:

    Image* img = new Image();
    img->initWithImageFile("HelloWorld.png");
    Texture2D* texture = new Texture2D();
    texture->initWithImage(img);
    auto sprite = Sprite::createWithTexture(texture);
    // or 
    // auto sprite = Sprite::createWithTexture(texture, Rect(30, 120, 130, 50));

Además, a través del método addImage de getTextureCache ():

auto sprite = Sprite::createWithTexture(Director::getInstance()->getTextureCache()->addImage("HelloWorld.png"));

Entonces, ¿cuál es la diferencia entre create y createWithTexture? De hecho, si observa el código fuente, encontrará que el interior de create se implementa con Texture2D. Para la facilidad de uso y comprensión del usuario, cree envolturas Texture2D nuevamente.

¿Cuándo se usan? Si la imagen es demasiado grande y no se usa comúnmente, créela directamente; si se usa con frecuencia en la escena del juego, se crea la textura.

Método 3: caché de marco (SpriteFrameCache)

Esto se aplica a animación de cuadros, gestión de atlas, etc. El número general de sprites en el juego será mucho, agregamos que uno por uno es un poco diferente, esta vez usará el buffer de cuadros.

Como hay más contenido, lo explicaré en el próximo blog.

 

 

 

 

 

104 artículos originales publicados · Me gusta8 · Visita 210,000+

Supongo que te gusta

Origin blog.csdn.net/sunnyboychina/article/details/105080417
Recomendado
Clasificación