国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

零基礎學Cocos2d

來源:懂視網 責編:小采 時間:2020-11-09 07:20:03
文檔

零基礎學Cocos2d

零基礎學Cocos2d:// 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::createScen
推薦度:
導讀零基礎學Cocos2d:// 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::createScen

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


那么接下來,我們看看這場戲到底內部是執行流程的啊。


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; \
 } \
}

看完后 ,哦,,,,
CREATE_FUNC(HelloWorld);

就是相當于

在 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;
 }
}

好了,有宏的話,讓我們剩下了不少代碼的工作量啊。

接下來我們看看其他的吧


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

可以寫成
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;
}

我們創建初始化一個場景后,然后又初始化一個層,將層放入場景里。


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

雖然這段很長,不過包含了很多要學習的知識。


從表面上看,這段代碼都在講初始化的那些事。

細心觀察,這個和Objective-C 的 init 方法多類似啊,只是不是返回對象。

我們精簡一下這段代碼的框架

bool HelloWorld::init()
{
 if ( !Layer::init() )
 {
 return false;
 }
 
 //初始化的內容
 
 return true;
}


接下來看看里面進行的初始化的內容吧


向導演問了相關舞臺的數據

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



或者寫成

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



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

 


創建一個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);
我們接下來就是把加載一張圖片,全屏顯示


首先用精靈創建一個實例,參數是一張圖片。

然后設置精靈的位置。

最后把精靈加入層里,



最后我們看看回調函數吧,當點擊按鈕時,就會觸發這個回調函數,因為已經關聯上了。

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
}

這里實現的功能很簡單,就是退出應用程序而已。



好了,就這樣就結束了。接下來就是詳情了。

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

呵呵

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

零基礎學Cocos2d

零基礎學Cocos2d:// 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::createScen
推薦度:
標簽: 學習 co 基礎
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top 主站蜘蛛池模板: 欧美在线播放视频 | 婷婷久久综合 | 在线免费观看国产视频 | 国产高清在线看 | 国产精品毛片va一区二区三区 | 不卡免费视频 | 日韩视频免费在线观看 | 91一区二区三区四区五区 | 国产一区二区三区高清 | 欧美日韩亚洲天堂 | 日韩一区二区三区在线 | 国产亚洲精品a在线观看app | 伊人精品国产 | 国模私拍一区二区 | 综合 欧美 国产 视频二区 | 久久精品国产亚洲a不卡 | 91久久九九精品国产综合 | 亚洲欧美另类在线观看 | 亚洲欧美日韩高清一区二区一 | 欧美日韩高清一区 | 亚洲欧美日韩国产 | 久久亚洲一区二区 | 91aaa在线观看 | 国产成人综合久久精品亚洲 | 亚洲国产精品综合久久一线 | 一区二区三区视频在线播放 | 国产97视频 | 日韩毛片大全 | 久久精品视频一区二区三区 | 久久精品免费一区二区视 | 久久66热re国产毛片基地 | 国产在线视欧美亚综合 | 日韩资源在线 | 欧美人善交 | 么公又大又硬又粗又爽的视频 | 亚洲欧美日韩在线观看播放 | 亚洲伊人久久综合一区二区 | 在线播放一区二区三区 | 国产第八页 | 精品久久久久久国产牛牛app | 另类专区 亚洲 |