Cocos2d-x 4.0 ruta de aprendizaje (4) aprendizaje simple Código HelloWorld

Comencemos a aprender desde el principio del código HelloWorld.
Entonces, ¿cómo se muestra la ventana HelloWorld? Tenemos que encontrar el programa de entrada, por supuesto, la función principal. El siguiente es el directorio del proyecto HelloWorld:
Inserte la descripción de la imagen aquí
abra main.cpp, hay 2 líneas de código, la entrada real es Classes \ AppDelegate.cpp
Inserte la descripción de la imagen aquí

AppDelegate.cpp

Hay un applicationDidFinishLaunching()método en él. Este es el punto de entrada real del programa (también es el punto de entrada de multiplataforma. Busque cómo cocos multiplataforma). Interprete el código:
1. Defina un Director cuando entre.

// initialize director
auto director = Director::getInstance();

El papel de este director es muy poderoso, de hecho, es el mismo que el director en realidad. Todas las escenas, actores, fondos, música, etc. que se realizarán deben ser controlados por el director. Luego, el director hizo muchas cosas, elegí escribir principalmente:
2. director->setDisplayStats(true);Establecer si mostrar el marco del juego y otra información de depuración. (Es decir, la información digital en la esquina inferior izquierda de la pantalla HelloWorld)
3. director->setAnimationInterval(1.0f / 60);Establezca la velocidad de fotogramas del juego, 60 fotogramas por segundo. ¿Cuál es la velocidad de fotogramas? De hecho, el mundo del juego cambia constantemente de una imagen a otra, lo que hace que las personas sientan la ilusión de la animación. Luego, cada imagen es un marco, entonces esta configuración es que se pueden cambiar 60 imágenes en 1 segundo.
4. director->setContentScaleFactor();Establezca la resolución. Habrá varias ramas para determinar el tamaño de los medios que desea mostrar, y la resolución puede establecerse de manera diferente. ¿Es inteligente?
5. Haga auto scene = HelloWorld::createScene();una instancia de la escena HelloWorld. Aquí se generan todo tipo de imágenes, menús, etiquetas, etc. en nuestra pantalla HelloWorld.
6. El director->runWithScene(scene);comentario es muy claro y se ejecuta. ¡Es el director el que hace correr HelloWorld!

El tamaño del formulario predeterminado aumenta y la visualización del formulario es relativamente pequeña, entonces, ¿cómo hacemos para que el formulario sea más grande? Simplemente modifique este lugar:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX)
        glview = GLViewImpl::createWithRect("HelloWorld", cocos2d::Rect(0, 0, designResolutionSize.width, designResolutionSize.height));

Inserte la descripción de la imagen aquí
Ctrl + F5 para ejecutarlo, ¿es la ventana más grande y la resolución más alta? Entonces es conveniente para nosotros agregarle algo y verlo más tarde.

HelloWorldScene.cpp

A continuación, fui al mundo de la pantalla de HelloWorld.
Desde AppDelegate, sabemos que HelloWorld se genera utilizando el método createScene ().

Scene* HelloWorld::createScene()
{
    return HelloWorld::create();
}

Entonces la HelloWorld::create();ejecución es una función macro en HelloWorldScene.h.
HelloWorldScene.h
Su definición es esta: (plataforma / CCPlatformMacros.h)

#define CREATE_FUNC(__TYPE__) \
static __TYPE__* create() \
{ \
    __TYPE__ *pRet = new(std::nothrow) __TYPE__(); \
    if (pRet && pRet->init()) \
    { \
        pRet->autorelease(); \
        return pRet; \
    } \
    else \
    { \
        delete pRet; \
        pRet = nullptr; \
        return nullptr; \
    } \
}

En pocas palabras, la función macro es reemplazar el parámetro __TYPE__ con el valor que pasa en tiempo de compilación. Aquí está HelloWorld. Luego, al compilar, se compila el siguiente código:

static HelloWorld* create() 
{ 
    HelloWorld *pRet = new(std::nothrow) HelloWorld(); 
    if (pRet && pRet->init()) 
    { 
        pRet->autorelease(); 
        return pRet; 
    } 
    else 
    { 
        delete pRet; 
        pRet = nullptr; 
        return nullptr; 
    } 
}

Entonces, lo que se hace en create () es definir una instancia de HelloWorld y ejecutar su función de inicialización pRet->init().
Bien, vayamos al método Init () de HelloWorld:
1. Llame al método de inicialización de la clase principal, porque HelloWorldScene hereda de Scene.

bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !Scene::init() )
    {
        return false;
    }
	......
}

2. Se agregó un botón de cierre ( MenuItemImage::create). Este es el icono en la esquina inferior derecha de la pantalla.
Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquí
Normalmente, se muestra CloseNormal.png, y cuando se termina el mouse, se muestra CloseSelected.png. (Las imágenes y otros archivos en el proyecto están en la carpeta de Recursos).

    /////////////////////////////
    // 2. add a menu item with "X" image, which is clicked to quit the program
    //    you may modify it.

    // add a "close" icon to exit the progress. it's an autorelease object
    auto closeItem = MenuItemImage::create(
                                           "CloseNormal.png",
                                           "CloseSelected.png",
                                           CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));

    if (closeItem == nullptr ||
        closeItem->getContentSize().width <= 0 ||
        closeItem->getContentSize().height <= 0)
    {
        problemLoading("'CloseNormal.png' and 'CloseSelected.png'");
    }
    else
    {
        float x = origin.x + visibleSize.width - closeItem->getContentSize().width/2;
        float y = origin.y + closeItem->getContentSize().height/2;
        closeItem->setPosition(Vec2(x,y));
    }

    // create menu, it's an autorelease object
    auto menu = Menu::create(closeItem, NULL);
    menu->setPosition(Vec2::ZERO);
    this->addChild(menu, 1);

Después de eso, se configuró una función de devolución de llamada para CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)realizar la acción de hacer clic en el botón (cerrar el programa).
Lo siguiente es establecer la posición de este botón closeItem->setPosition(Vec2(x,y));en la esquina inferior derecha.
Finalmente, agregue este menú a la escena HelloWorld:this->addChild(menu, 1);

Resuma el flujo de agregar controles:
a. Instanciar un control XXX::create(), configurar la imagen en él, configurar la función de devolución de llamada con acciones
b. Establecer la posición de visualización setPosition(). Calcule esto usted mismo
c. Agregue a la escenathis->addChild()

3. El siguiente código es relativamente fácil de entender: se agregó una etiqueta y un sprite.
La etiqueta muestra HelloWorld. El elfo muestra el ícono del coco.
Estos son los procesos mencionados anteriormente.

// add a label shows "Hello World"
    // create and initialize a label

    auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24);
    if (label == nullptr)
    {
        problemLoading("'fonts/Marker Felt.ttf'");
    }
    else
    {
        // position the label on the center of the screen
        label->setPosition(Vec2(origin.x + visibleSize.width/2,
                                origin.y + visibleSize.height - label->getContentSize().height));

        // add the label as a child to this layer
        this->addChild(label, 1);
    }

    // add "HelloWorld" splash screen"
    auto sprite = Sprite::create("HelloWorld.png");
    if (sprite == nullptr)
    {
        problemLoading("'HelloWorld.png'");
    }
    else
    {
        // position the sprite on the center of the screen
        sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

        // add the sprite as a child to this layer
        this->addChild(sprite, 0);
    }

Lo anterior es el proceso de hacer y mostrar la pantalla HelloWorld.

Luego, podemos referirnos a la documentación oficial para el uso de los diversos controles anteriores :
Inserte la descripción de la imagen aquí
puede ingresar, por ejemplo, Etiqueta en la barra de búsqueda, puede encontrar una introducción a la Etiqueta: La
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
documentación anterior es solo un documento de descripción simple, registros detallados de uso de API, También debe consultar la documentación de la API :
Inserte la descripción de la imagen aquí

El fin

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

Supongo que te gusta

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