Rumah pangkalan data tutorial mysql 零基础学Cocos2d

零基础学Cocos2d

Jun 07, 2016 pm 03:49 PM
create Pangkalan

// create a scene. it's an autorelease object Scene *scene = HelloWorld :: createScene (); // run director- runWithScene (scene); 那么接下来,我们看看这场戏到底内部是执行流程的

// create a scene. it's an autorelease object

    Scene *scene = HelloWorld::createScene();


    // run

    director->runWithScene(scene);


那么接下来,我们看看这场戏到底内部是执行流程的啊。

零基础学Cocos2d

OK,首先看看HelloWorldScene.h 到底有什么东西。

静态创建函数

static cocos2d::Scene* createScene();


初始化

virtualbool init();


菜单的一个回调函数

void menuCloseCallback(cocos2d::Ref* pSender);


这个。。。。看宏定义上面的注释说是创建一个特定的类

CREATE_FUNC(HelloWorld);


/**
 * define a create function for a specific type, such as Layer
 * @param \__TYPE__  class type to add create(), such as Layer
 */
#define CREATE_FUNC(__TYPE__) \
static __TYPE__* create() \
{ \
    __TYPE__ *pRet = new __TYPE__(); \
    if (pRet && pRet->init()) \
    { \
        pRet->autorelease(); \
        return pRet; \
    } \
    else \
    { \
        delete pRet; \
        pRet = NULL; \
        return NULL; \
    } \
}
Salin selepas log masuk

看完后 ,哦,,,,
CREATE_FUNC(HelloWorld);
Salin selepas log masuk

就是相当于

在 HelloWorldScene.h 的定义

static HelloWorld* create();

在 HelloWorldScene.m 的实现

HelloWorld* HelloWorld::create()
{
    //创建一个 HelloWorld 对象
    HelloWorld* helloWorld = new HellWorld();
    //判断 HelloWorld 对象是否创建以及初始化成功
    if (helloWorld && helloWorld->init())
    {
        //创建成功,初始化成功后,让其自动释放内存
        helloWorld->autorelease();
        //返回 HelloWorld 实例
        return helloWorld;
    } else {
        //如果创建失败,将安全删除 HelloWorld 对象
        delete helloWorld;
        helloWorld = NULL;
        return NULL;
    }
}
Salin selepas log masuk

好了,有宏的话,让我们剩下了不少代码的工作量啊。

接下来我们看看其他的吧


HelloWorldScene.cpp 的里面的函数的执行顺序是

Scene* HelloWorld::createScene();

bool HelloWorld::init();


Scene* HelloWorld::createScene()
{
    // 'scene' is an autorelease object
    auto scene = Scene::create();
    
    // 'layer' is an autorelease object
    auro layer = HelloWorld::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}
Salin selepas log masuk

可以写成
Scene* HelloWorld::createScene()
{
    // 'scene' is an autorelease object
    Scene* scene = Scene::create();
    
    // 'layer' is an autorelease object
    Layer* layer = HelloWorld::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}
Salin selepas log masuk

我们创建初始化一个场景后,然后又初始化一个层,将层放入场景里。


// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }
    
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Point origin = Director::getInstance()->getVisibleOrigin();

    /////////////////////////////
    // 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));
    
	closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
                                origin.y + closeItem->getContentSize().height/2));

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

    /////////////////////////////
    // 3. add your codes below...

    // add a label shows "Hello World"
    // create and initialize a label
    
    auto label = LabelTTF::create("Hello World", "Arial", 24);
    
    // position the label on the center of the screen
    label->setPosition(Point(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");

    // position the sprite on the center of the screen
    sprite->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

    // add the sprite as a child to this layer
    this->addChild(sprite, 0);
    
    return true;
}
Salin selepas log masuk

虽然这段很长,不过包含了很多要学习的知识。


从表面上看,这段代码都在讲初始化的那些事。

细心观察,这个和Objective-C 的 init 方法多类似啊,只是不是返回对象。

我们精简一下这段代码的框架

bool HelloWorld::init()
{
    if ( !Layer::init() )
    {
        return false;
    }
    
    //初始化的内容
    
    return true;
}
Salin selepas log masuk


接下来看看里面进行的初始化的内容吧


向导演问了相关舞台的数据

Size visibleSize = Director::getInstance()->getVisibleSize();
Point origin = Director::getInstance()->getVisibleOrigin();
Salin selepas log masuk


然后搞一个按钮出来,这个按钮可以触发指定的事件


// 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));
    
	closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
                                origin.y + closeItem->getContentSize().height/2));

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



或者写成

// 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
    MenuItemImage* closeItem = MenuItemImage::create(
                                           "CloseNormal.png",
                                           "CloseSelected.png",
                                           CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
    
	closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
                                origin.y + closeItem->getContentSize().height/2));

    // create menu, it's an autorelease object
    Menu* menu = Menu::create(closeItem, NULL);
    menu->setPosition(Point::ZERO);
    this->addChild(menu, 1);
Salin selepas log masuk



MenuItemImage 类 创建一个对象,放入两张图片,和一个回调函数。

第一张图片是正常状态的,第二张是选择状态时的,回调函数,this 应该是目标

和iOS 创建按钮很相似,而区别是没有触发事件的手势设置。

接下来就是设置 MenuItemImage 类 实例的位置

通过 MenuItemImage 类 实例 创建一个 Menu 类的实例。

设置坐标

最后,将这个Menu类的实例加入当前 Layer中

接下来就是创建一个Label 类了。

根据官方发布文档所描述。3.0将采用一个Label 类 来创建不同类型的Label,而且优化了很多性能,这些也是后话了。

// 3. add your codes below...

    // add a label shows "Hello World"
    // create and initialize a label
    
    auto label = LabelTTF::create("Hello World", "Arial", 24);
    
    // position the label on the center of the screen
    label->setPosition(Point(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);

    
Salin selepas log masuk


创建一个LabelTTF类的实例,参数1是内容,参数2是字体,参数3是字体大小

然后就是设置 这个实例的位置

然后加入层



// add "HelloWorld" splash screen"
    auto sprite = Sprite::create("HelloWorld.png");

    // position the sprite on the center of the screen
    sprite->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

    // add the sprite as a child to this layer
    this->addChild(sprite, 0);
Salin selepas log masuk
我们接下来就是把加载一张图片,全屏显示


首先用精灵创建一个实例,参数是一张图片。

然后设置精灵的位置。

最后把精灵加入层里,



最后我们看看回调函数吧,当点击按钮时,就会触发这个回调函数,因为已经关联上了。

void HelloWorld::menuCloseCallback(Ref* pSender)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
	MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
    return;
#endif

    Director::getInstance()->end();

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
}
Salin selepas log masuk

这里实现的功能很简单,就是退出应用程序而已。



好了,就这样就结束了。接下来就是详情了。

表面上看,Cocos2d-X 真的不难~~~

呵呵

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tutorial Asas PHP: Dari Pemula hingga Master Tutorial Asas PHP: Dari Pemula hingga Master Jun 18, 2023 am 09:43 AM

PHP ialah bahasa skrip sebelah pelayan sumber terbuka yang digunakan secara meluas yang boleh mengendalikan semua tugas dalam pembangunan web. PHP digunakan secara meluas dalam pembangunan web, terutamanya untuk prestasi cemerlangnya dalam pemprosesan data dinamik, jadi ia disukai dan digunakan oleh ramai pembangun. Dalam artikel ini, kami akan menerangkan asas PHP langkah demi langkah untuk membantu pemula daripada mula menjadi mahir. 1. Sintaks asas PHP ialah bahasa yang ditafsirkan yang kodnya serupa dengan HTML, CSS dan JavaScript. Setiap penyata PHP berakhir dengan koma bertitik;

Ketahui asas pembolehubah bahasa Go Ketahui asas pembolehubah bahasa Go Mar 22, 2024 pm 09:39 PM

Bahasa Go ialah bahasa yang disusun secara statik yang dibangunkan oleh Google Cirinya yang ringkas dan cekap telah menarik perhatian dan kasih sayang yang meluas daripada pembangun. Dalam proses pembelajaran bahasa Go, menguasai pengetahuan asas pembolehubah adalah langkah yang penting. Artikel ini akan menerangkan pengetahuan asas seperti definisi, tugasan dan inferens jenis pembolehubah dalam bahasa Go melalui contoh kod khusus untuk membantu pembaca lebih memahami dan menguasai mata pengetahuan ini. Dalam bahasa Go, anda boleh menggunakan kata kunci var untuk menentukan pembolehubah, iaitu format nama pembolehubah var dan jenis pembolehubah.

Pengenalan kepada Asas PHP: Cara menggunakan fungsi gema untuk mengeluarkan kandungan teks Pengenalan kepada Asas PHP: Cara menggunakan fungsi gema untuk mengeluarkan kandungan teks Jul 30, 2023 pm 05:38 PM

Pengenalan asas kepada PHP: Cara menggunakan fungsi gema untuk mengeluarkan kandungan teks Dalam pengaturcaraan PHP, anda selalunya perlu mengeluarkan beberapa kandungan teks ke halaman web Dalam kes ini, anda boleh menggunakan fungsi gema. Artikel ini akan memperkenalkan cara menggunakan fungsi gema untuk mengeluarkan kandungan teks dan menyediakan beberapa kod sampel. Sebelum memulakan, pastikan anda telah memasang PHP dan mengkonfigurasi persekitaran berjalan. Jika PHP belum dipasang, anda boleh memuat turun versi stabil terkini dari laman web rasmi PHP (https://www.php.net).

Penjelasan terperinci tentang fungsi bahasa C: analisis asas kepada lanjutan yang komprehensif tentang penggunaan fungsi Penjelasan terperinci tentang fungsi bahasa C: analisis asas kepada lanjutan yang komprehensif tentang penggunaan fungsi Feb 18, 2024 pm 02:25 PM

Ensiklopedia fungsi bahasa C: daripada asas kepada lanjutan, penerangan terperinci tentang cara menggunakan fungsi, contoh kod khusus diperlukan Pengenalan: Bahasa C ialah bahasa pengaturcaraan yang digunakan secara meluas, dan fungsi dan fleksibilitinya yang berkuasa menjadikannya pilihan pertama banyak pembangun. Dalam bahasa C, fungsi ialah konsep penting Ia boleh menggabungkan sekeping kod ke dalam modul bebas, meningkatkan kebolehgunaan semula dan kebolehselenggaraan kod. Artikel ini akan memperkenalkan penggunaan fungsi bahasa C dari asas dan secara beransur-ansur maju untuk membantu pembaca menguasai kemahiran menulis fungsi. 1. Definisi dan panggilan fungsi dalam C

Bolehkah pernyataan cipta digunakan untuk mencipta struktur jadual dan menambah rekod baharu? Bolehkah pernyataan cipta digunakan untuk mencipta struktur jadual dan menambah rekod baharu? Jul 25, 2022 am 11:25 AM

tidak boleh. Fungsi pernyataan CREATE adalah untuk mencipta struktur jadual, tetapi ia tidak boleh menambahkan rekod baharu Anda boleh menggunakan pernyataan INSERT untuk menambah rekod baharu. Pernyataan CREATE boleh digunakan untuk mencipta jadual baharu dalam pangkalan data dan menentukan atribut dan kekangan lajur data bagaimanapun, jadual yang baru dibuat ialah jadual kosong dan memerlukan penggunaan pernyataan INSERT untuk menambah rekod baharu; Pernyataan INSERT digunakan untuk memasukkan satu atau lebih baris data tuple ke dalam jadual sedia ada dalam pangkalan data.

Jangan lepaskan peluang anda untuk mendapatkan pensijilan Basic C# percuma anda sekarang daripada Microsoft Jangan lepaskan peluang anda untuk mendapatkan pensijilan Basic C# percuma anda sekarang daripada Microsoft Sep 01, 2023 pm 12:45 PM

Memanggil semua pembangun C#! Microsoft dan organisasi bukan untung freeCodeCamp mengumumkan pelancaran pensijilan Asas C# percuma global baharu. Pensijilan ini direka bentuk untuk membantu pembangun dari semua peringkat mempelajari asas C#, bahasa pengaturcaraan popular yang digunakan untuk mencipta pelbagai aplikasi dan anda boleh memaparkannya dalam profil LinkedIn anda. Pensijilan ini termasuk 35 jam kursus latihan Microsoft Learn dan peperiksaan 80 soalan yang dihoskan di freeCodeCamp. Kursus ini merangkumi topik seperti pembolehubah, jenis data, struktur kawalan, dan pengaturcaraan berorientasikan objek. “Pensijilan C# Asas kami menyediakan perkara itu – bukti keupayaan anda untuk menguasai serba boleh ini

Penggunaan fungsi PHP: daripada asas kepada lanjutan Penggunaan fungsi PHP: daripada asas kepada lanjutan Jun 15, 2023 pm 11:11 PM

PHP ialah bahasa skrip bahagian pelayan yang digunakan secara meluas untuk membangunkan laman web dinamik, aplikasi web dan perkhidmatan Internet yang lain. Dalam proses membangunkan aplikasi PHP, menggunakan fungsi boleh membantu memudahkan kod, meningkatkan kebolehgunaan semula kod dan mengurangkan kos pembangunan. Artikel ini akan memperkenalkan penggunaan asas dan penggunaan lanjutan fungsi PHP. 1. Penggunaan asas fungsi PHP 1. Tentukan fungsi Dalam PHP, gunakan kata kunci fungsi untuk mentakrifkan fungsi, contohnya: functiongreet($name){

Nota kajian PHP: sintaks asas dan definisi pembolehubah Nota kajian PHP: sintaks asas dan definisi pembolehubah Oct 09, 2023 am 08:03 AM

Nota kajian PHP: Sintaks asas dan definisi berubah Dalam era Internet hari ini, PHP (Hypertext Preprocessor), sebagai bahasa skrip pelayan yang digunakan secara meluas, digemari oleh semakin ramai pembangun. Artikel ini akan memperkenalkan anda kepada sintaks asas PHP dan definisi pembolehubah, serta menyediakan contoh kod khusus untuk membantu pemula memahami dan menguasainya dengan lebih baik. 1. Sintaks asas PHP Penandaan kod PHP Dalam kod PHP, kita sering menggunakan "<?php" dan "?&

See all articles