Cocos2d-x 4.0 caminho de aprendizagem (4) código simples do HelloWorld para aprendizado

Vamos começar a aprender desde o início do código HelloWorld.
Então, como a janela do HelloWorld é exibida? Temos que encontrar o programa de entrada, é claro, a função principal. A seguir está o diretório do projeto HelloWorld:
Insira a descrição da imagem aqui
abra main.cpp, existem 2 linhas de código, a entrada real é Classes \ AppDelegate.cpp
Insira a descrição da imagem aqui

AppDelegate.cpp

Existe um applicationDidFinishLaunching()método nele: este é o ponto de entrada real do programa (também é o ponto de entrada da plataforma cruzada. Por favor, procure como os cocos cruzam a plataforma). Interprete o código:
1. Defina um diretor quando entrar.

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

O papel desse diretor é muito poderoso; na verdade, é o mesmo que o diretor na realidade. Todas as cenas, atores, origens, músicas, etc. a serem executadas precisam ser controladas pelo diretor. Então, em seguida, o diretor fez muitas coisas, optei por escrever principalmente:
2. director->setDisplayStats(true);Defina se é necessário exibir o quadro do jogo e outras informações de depuração. (Ou seja, as informações digitais no canto inferior esquerdo da tela HelloWorld)
3. director->setAnimationInterval(1.0f / 60);Defina a taxa de quadros do jogo, 60 quadros por segundo. Qual é a taxa de quadros? De fato, o mundo do jogo muda constantemente de imagem para imagem, o que faz as pessoas sentirem a ilusão de animação. Em seguida, cada imagem é um quadro, então essa configuração é que 60 imagens podem ser trocadas em 1 segundo.
4. director->setContentScaleFactor();Defina a resolução. Haverá várias ramificações para determinar o tamanho da mídia que você deseja exibir e a resolução pode ser definida de maneira diferente. Isso é inteligente?
5. Faça auto scene = HelloWorld::createScene();uma instância da cena HelloWorld. Todos os tipos de fotos, menus, etiquetas etc. na nossa tela do HelloWorld são gerados aqui.
6. O director->runWithScene(scene);comentário é muito claro e é executado. É o diretor que faz o HelloWorld funcionar!

O tamanho do formulário padrão aumenta e a exibição do formulário é relativamente pequena, então como aumentamos o formulário? Basta modificar este local:

#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));

Insira a descrição da imagem aqui
Ctrl + F5 para executá-lo, a janela é maior e a resolução mais alta? Então é conveniente adicionar algo a ele e assisti-lo mais tarde.

HelloWorldScene.cpp

Em seguida, fui ao mundo da tela do HelloWorld.
No AppDelegate, sabemos que o HelloWorld é gerado usando o método createScene ().

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

Em seguida, a HelloWorld::create();execução é uma função macro no HelloWorldScene.h.
HelloWorldScene.h
Sua definição é esta: (platform / 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; \
    } \
}

Simplificando, a função macro é substituir o parâmetro __TYPE__ pelo valor que você passa no momento da compilação. Aqui está o HelloWorld. Então, ao compilar, é o seguinte código compilado:

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

Portanto, o que é feito em create () é definir uma instância do HelloWorld e executar sua função de inicialização pRet->init().
Ok, vamos ao método Init () do HelloWorld:
1. Chame o método de inicialização da classe pai, porque o HelloWorldScene herda da Scene.

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

2. Adicionado um botão Fechar ( MenuItemImage::create). Este é o ícone no canto inferior direito da tela.
Insira a descrição da imagem aquiInsira a descrição da imagem aqui
Normalmente, CloseNormal.png é exibido e, quando o mouse termina, CloseSelected.png é exibido. (As imagens e outros arquivos no projeto estão na pasta Recurso.)

    /////////////////////////////
    // 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);

Depois disso, uma função de retorno de chamada foi definida para CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)realizar a ação de clicar no botão (fechar o programa).
Em seguida, defina a posição desse botão closeItem->setPosition(Vec2(x,y));no canto inferior direito.
Por fim, adicione este menu à cena HelloWorld:this->addChild(menu, 1);

Resuma o fluxo de adição de controles:
a) Instale um controle XXX::create(), defina a imagem nele, defina a função de retorno de chamada com ações
b. Defina a posição de exibição setPosition(). Calcule você mesmo
c. Adicione à cenathis->addChild()

3. O código a seguir é relativamente fácil de entender: adicionado um Label e um sprite.
O rótulo mostra o HelloWorld. O elfo mostra o ícone do elfo cocos.
Estes são os processos mencionados acima.

// 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);
    }

O acima é o processo de criação e exibição da tela HelloWorld.

Em seguida, podemos consultar a documentação oficial para o uso dos vários controles acima :
Insira a descrição da imagem aqui
você pode inserir, por exemplo, Label na barra de pesquisa, pode encontrar uma introdução ao Label: A
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
documentação acima é apenas um documento de descrição simples, registros detalhados de uso da API, Você também deve consultar a documentação da API :
Insira a descrição da imagem aqui

O fim

Publicado 104 artigos originais · Gosto8 · Visite mais de 210.000

Acho que você gosta

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